博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【翻译】ASP.NET WEB API异常处理
阅读量:5974 次
发布时间:2019-06-19

本文共 2131 字,大约阅读时间需要 7 分钟。

当一个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));     }     return 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);     }     return item; }
 

结果如下图所示

另外

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

异常过滤器可以接到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);        }    }
 

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

运行的效果如下

另外

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

也可以使用特性的写法

[NotImplExceptionFilter]        public IEnumerable
AllProducts() {
 

转载地址:http://ilbox.baihongyu.com/

你可能感兴趣的文章
一篇文章能够看懂基础源代码之JAVA篇
查看>>
什么是大数据技术架构
查看>>
【分享】如何救援記憶卡中誤刪的資料
查看>>
教你回收站里面的东西删除了怎么恢复的技巧
查看>>
4个方面彻底说清JS的深拷贝/浅拷贝
查看>>
北方计算机专修学院“展示自我 秀出风采” 网页创意设计大赛成功举办
查看>>
DNS解析相关实验:7台主机的恩怨情仇
查看>>
Goldengate双向复制配置
查看>>
Oracle官方内部MAA教程
查看>>
DNS相关配置
查看>>
Nginx-location配置
查看>>
code::block
查看>>
扫描线
查看>>
设计模式--模板方法(Template Method)
查看>>
引入CSS的方式有哪些?link和@import的有何区别应如何选择【转载】
查看>>
MariaDB 和 MySQL 性能测试比较
查看>>
软件工程的实践项目课程的自我目标
查看>>
完美解决 Your project contains error(s),please fix them before running your application问题
查看>>
nagios安装配置(四):nagios配置
查看>>
Restful Web Service初识
查看>>