当前位置: 首页 >服务端 > 【翻译】ASP.NET WEB API异常处理

【翻译】ASP.NET WEB API异常处理

当一个web api抛出一个异常后

此异常会被转化成一个HTTP响应

错误代码为500的服务错误

但是如果你不想让客户端看到500的错误码

你也可以自定义错误码

如下代码当用户输入的ID没有与之相关的数据

则返回了错误码为404的错误

(页面未找到)

public Product GetProduct(int id) { Product item = repository.Get(id); if (item == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } retu item; }
 

如果需要进一步自定义错误消息的内容

可以通过如下方法来完成

public Product GetProduct(int id) { Product item = repository.Get(id); if (item == null) { var resp = new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent(string.Format("No product with ID = {0}", id)), ReasonPhrase = "Product ID Not Found" } throw new HttpResponseException(resp); } retu item; }
 

结果如下图所示

【翻译】ASP.NET WEB API异常处理 _ JavaClub全栈架构师技术笔记

【翻译】ASP.NET WEB API异常处理 _ JavaClub全栈架构师技术笔记

另外

开发人员可以托管异常的抛出

异常过滤器可以接到controller抛出的任何未处理异常,

并不单单是HttpResponseException

异常过滤器实现了System.Web.Http.Filters.IExceptionFilter接口

 using System; using System.Net; using System.Net.Http; using System.Web.Http.Filters;  public class NotImplExceptionFilter : ExceptionFilterAttribute  { public override void OnException(HttpActionExecutedContext context) { if (context.Exception is NotImplementedException) { context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); } } } 
 

光创建了异常过滤器还不够

还要注册到系统中去才有效

public class WebApiApplication : System.Web.HttpApplication{static void ConfigureApi(HttpConfiguration config){config.Filters.Add(new HelloWebAPI.Controllers.NotImplExceptionFilter());} protected void Application_Start(){AreaRegistration.RegisterAllAreas();ConfigureApi(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}}
 

我目前还不知道怎么在这里注册这个过滤器

【翻译】ASP.NET WEB API异常处理 _ JavaClub全栈架构师技术笔记

运行的效果如下

【翻译】ASP.NET WEB API异常处理 _ JavaClub全栈架构师技术笔记

【翻译】ASP.NET WEB API异常处理 _ JavaClub全栈架构师技术笔记

另外

如果知识针对某个类或者某个action处理异常

也可以使用特性的写法

[NotImplExceptionFilter]public IEnumerable<Product> AllProducts(){
 

作者:liulun
来源链接:https://www.cnblogs.com/liulun/archive/2012/07/09/2582733.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/112386.html

标签:异常处理
分享给朋友: