> 信息中心 >

.NET异常处理和状态码问题,大家是怎么处理的

来源:互联网 编辑:刘梓楠

有网友碰到过这样的问题:.NET异常处理和状态码问题,大家是怎么处理的,问题详细内容为:

起因是我想写一个RESTful风格的接口,比如添加一个学生实体,其中有一个字段Sex是int型,合法数据有1,和2,分别代表男和女。

现在,我想验证用户传过来的参数是否合法,如果不是1或者2,就抛出异常:

...... if(s.Sex!=1 | s.Sex!=2) { throw new ArgumentException("sex参数异常"); } ......

但是我发现,这样throw出去的http状态码是200,和接口正常返回时的状态码相同,没法区分。

想请问下大家:

1. 是不是所有这样throw出来的exception的状态码都是200?

2. 有没有办法自己定义状态码?

3. 如果自定义自己的异常类(继承System.Exception),是否有必要?

4. 大家在写RESTful风格的接口时,是怎么处理异常的?

 

谢谢

,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

解决方案1:
怎么会是 200 ?是不是被你在那个地方 catch 了? 奖励园豆:5
============================================
我写了一个全局异常处理的中间件,在中间件里catch了: /// <summary> /// 全局异常过滤 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Invoke(HttpContext context) { int statusCode; string msg = ""; try { await _next(context); } catch (Exception ex) //发生异常 { statusCode = context.Response.StatusCode; //if (ex is ArgumentException) //如果是参数异常,将状态码赋值为400 //{ //context.Response.StatusCode = 400; //statusCode = 400; //} LogHelper.SetLog(LogLevel.Error, ex); await HandleExceptionAsync(context, statusCode, ex.Message); } finally { statusCode = context.Response.StatusCode; switch (statusCode) { case 401: msg = "未授权"; break; case 404: msg = "未找到服务"; break; case 502: msg = "请求错误"; break; default: if (statusCode != 200) { msg = "未知错误"; } break; } if (!string.IsNullOrWhiteSpace(msg)) { await HandleExceptionAsync(context, statusCode, msg); } } } /// <summary> /// 返回异常消息 /// </summary> /// <param name="context"></param> /// <param name="statusCode"></param> /// <param name="msg"></param> /// <returns></returns> private static Task HandleExceptionAsync(HttpContext context, int statusCode, string msg) { var data = new { Code = statusCode.ToString(), Success = false, Msg = msg }; context.Response.ContentType = "application/json;charset=utf-8"; return context.Response.WriteAsync(JsonConvert.SerializeObject(data)); } 是因为这个地方catch了才变成200的吗?
============================================
@在7楼: catch中处理完毕后需要把异常继续扔出去 try { await _next(context); } catch (Exception ex) { //.. throw ex; }
============================================
@dudu:
我想用这个全局异常处理中间件把异常处理了之后返回出去,比如如果是没有认证,就返401状态码和相应的response body(body的内容在第二个函数定义了)。
如果在catch里throw出去,就直接throw给前端了,不管什么异常,最后状态码都变500了。
============================================
@在7楼: 根据状态码判断是否出错,然后从响应内容中获取具体的错误信息
============================================
@在7楼: 这里只需要将状态码设置为500,不需要继续抛异常
解决方案2:
可以直接return badrequest啊
解决方案3:
controller 继承ApiController 的话, 1.如果是core api 方法返回类型IActionResult, || 普通.net 返回类型IHttpActionResult
2.return BadRequest("消息提示"); 没问题的就返回 return Ok(data)

抱歉,您的店铺状态异常,请至PC端处理 淘宝显示这...

答:有没有具体的截图呢?如果有的话截图看一下最好的,当然也能猜到是什么情况,这个意思其实也很清楚,就是让你上电脑,去进入卖家中心体检中心,看看是不是你长时间连续六周没有销售产品,然后就是被暂时的释放了,所以说,你现在再点开,就成了...

百度站长中服务器错误 爬虫发起抓取,httpcode返回...

答:正常更新,多发些外链半个月左右就ok了 觉得对你有帮助的就采纳一下,谢谢

停止 [错误: 服务器返回异常的状态码] 怎么解决

答:一般的“非法操作”有两个选项:“关闭”和“详细资料”。可是“详细资料”里面的内容大多数人都看不明白,只好草草的关闭了。现在不用怕了,我来给大家讲解一下非法作的每个详细资料的具体含义。 1、停止错误编号:0x0000000A 说明文字:IRQL-NOT-LESS-...

HTTP状态码的服务器错误(5、6字头)

答:这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实...

http 错误502是什么意思 并求解决方法

答:错误代码:502 - Bad Gateway 产生原因 服务器(不一定是Web服务器)是作为网关或代理,以满足客户的要求(如Web浏览器或我们的CheckUpDown机器人)来访问所...

接口返回失败是什么意思

答:4/5 分步阅读 1,打开浏览器 2/5 2, 在上面输入你需要调用接口的api地址 3/5 3, 点击访问, 按下f12 查看调用结果 4/5 4, 这里我们看到调用失败 原因是...


请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/mv/clkdje.html report 3890 解决方案1:怎么会是 200 ?是不是被你在那个地方 catch 了?奖励园豆:5============================================我写了一个全局异常处理的中间件,在中间件里catch了:/// <summary>/// 全局异常过滤/// </summary>/// <param name="context"></param>/// <returns>&l

热门图片