博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WEB API异常处理
阅读量:5174 次
发布时间:2019-06-13

本文共 2187 字,大约阅读时间需要 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() {
 

转载于:https://www.cnblogs.com/eric-qin/p/5320953.html

你可能感兴趣的文章
单机/伪分布式Hadoop2.4.1安装文档
查看>>
十进制 转换成 二进制
查看>>
钻石操作符
查看>>
[LeetCode 题解]: Minimum Depth of Binary Tree
查看>>
LoadRunner脚本增强
查看>>
python集成安装环境——Anaconda 3.5的安装
查看>>
斐波那契数列
查看>>
function(){} 与(function(){})()的区别
查看>>
作用域
查看>>
yii2高级模板安装
查看>>
ROS学习笔记(六)——创建、编译包
查看>>
SVN服务器搭建(一)
查看>>
js 控制台输出
查看>>
图像处理基础知识
查看>>
串行写队列的MYSQL大文本参数
查看>>
云平台服务运行情况检测脚本V0.1
查看>>
Elasticsearch: 权威指南---基础入门
查看>>
python selenium chrome有界面与无界面模式
查看>>
【Unity游戏开发】Android6.0以上的动态权限申请问题
查看>>
1040 有几个PAT(25 分)
查看>>