http报500.net core 接口return成功

http:

Response code:500
Response message:Internal Server Error


接口返回数据:
{
    "IsSuccess": false,
    "Code": 200,
    "Message": "该手机号已注册,请重新尝试!",
    "RespTime": "2020-03-24 18:33:33.623",
    "Data": null
}

http 报错,但是数据是正常返回的

接口返回数据:
{
    "IsSuccess": false,
    "Code": 200,
    "Message": "该手机号已注册,请重新尝试!",
    "RespTime": "2020-03-24 18:33:33.623",
    "Data": null
}

只能说明 "该手机号已注册,请重新尝试!"

至于
Response code:500
Response message:Internal Server Error。
这个只是人家发现你手机已注册后,
直接 throw exception了,
统一交给了异常处理拦截器而已。

你看一下,“该手机号已注册”,这个逻辑出现后,
你是怎么接下来处理的。
如果是直接抛出异常,那么在异常过滤器里的代码又是如何实现的。

你在看看在Global.asax或者 filter中,有没有哪些针对Response统一操作的地方

发现他们搭建这个项目的人,只注册了这个:GlobalExceptionFilter,没有其他异常过滤器

使用,最开始这个问题就是这里面测试出来的,
一个线程,每5秒1,出现概率 1%

恩,那就回到了我之前提出的情况:并发问题

你们有详细的记录日志吗?
我听起来,你们可能是正式环境里,遇到这种问题,
那就可能和并发有关系了。

由于错误报的并不详细,只是服务器内部错误。
所以缺乏准确的错误信息,那么只能猜测了。
1 可能是并发访问使用了某些共享变量导致
2 可能某些访问产生了路由重定向
3 数据库操作期间是不是出问题了。

如果这个站点没有做全局异常捕获,并记录日志,
直接对外抛出了500异常,

如果是Windows服务器的IIS,可以登录服务器,看下系统日志下的应用程序日志。
如果是Linux,那只能想办法改代码加日志了。

也可以登录到服务器上,用127.0.0.1尝试反复刷新看看能不能重现。

可能是个与延迟有关的问题:你的软件服务量有多大?是否属于非重要业务?可能是系统忙的时候,就不运行这个代码了;但是也有可能是反过来的意思,就是系统需要分析调配你的软件的服务。总之,就是你的软件处于非正常运行状态。

我通过一步一步,记录日志发现,是他们在全局配置中,注册引用的一个第三方中间件,
里面的一个list出现null,然后抛出异常的。导致了,数据返回是正常的,http抛出500

500也是可以携带回执报文的好么,后端在编写接口的时候,返回的状态码和回执的内容有出入也是有这种情况的。比如有时候,前端要求我返回错误信息的时候,也用200 的状态码,通过以下代码,就可以模拟出你的情况,是我自己没看清楚题目,还是你自己不理解我说的?

你这种是人为的,是需求这样处理的。
但是我们的不是,我们的需求是http 200   code 也是200.
然后如果你的一个项目,不是人为出现这样的情况。
你还能轻松说出:“他返回的code 是自定义的,不一定和响应状态码一样的,纠结啥”
不要把一个bug 想的太简单

代码好像没有什么问题。很可能是系统服务方的问题。错误码500,很可能与系统延迟有关。其他的就没有论坛顶帖机什么可说的了。

报500的错误,就是程序内部处理出了问题,你没有用try处理就会这样

代码和服务器都没问题,
而是他们在全局配置类里面引用了一个第三方日志中间件,导致的
这就导致了,有概率出现 http:500,然后数据返回成功。大多数请求都是成功的

代码和服务器都没问题,
而是他们在全局配置类里面引用了一个第三方日志中间件,导致的
这就导致了,有概率出现 http:500,然后数据返回成功。大多数请求都是成功的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Core 中,我们可以使用 Data Annotations 和 FluentValidation 这两种方式来进行接口参数校验。 1. Data Annotations Data Annotations 是 .NET 中自带的一种属性验证方式。我们可以通过在接口参数上添加 Data Annotations 的方式来实现参数校验。 例如,我们可以在一个用户名参数上添加 Required 和 MaxLength 属性来实现必填和最大长度的校验: ```csharp public IActionResult Register([Required] string username, [MaxLength(20)] string password) { // ... } ``` 2. FluentValidation FluentValidation 是一种基于 Fluent API 的验证框架,它可以让我们更方便地编写、维护和扩展验证规则。 例如,我们可以创建一个 UserValidator 类来实现用户名和密码的校验: ```csharp public class UserValidator : AbstractValidator<User> { public UserValidator() { RuleFor(x => x.Username).NotEmpty().MaximumLength(20); RuleFor(x => x.Password).NotEmpty(); } } public class User { public string Username { get; set; } public string Password { get; set; } } public IActionResult Register(User user) { var validator = new UserValidator(); var result = validator.Validate(user); if (!result.IsValid) { return BadRequest(result.Errors); } // ... } ``` 在上面的示例中,我们使用 FluentValidation 定义了一个 UserValidator 类,并在其中定义了验证规则。在 Register 方法中,我们创建了一个 User 对象,并将其传递给 UserValidator 的 Validate 方法进行验证。如果验证失败,则返回 BadRequest 响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值