【翻译】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)); } 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<Product> AllProducts(){
【翻译】ASP.NET WEB API异常处理相关推荐
- Asp.Net Web API 2第七课——Web API异常处理
Asp.Net Web API 2第七课--Web API异常处理 原文:Asp.Net Web API 2第七课--Web API异常处理 前言 阅读本文之前,您也可以到Asp.Net Web AP ...
- Web API 2 入门——创建ASP.NET Web API的帮助页面(谷歌翻译)
在这篇文章中 创建API帮助页面 将帮助页面添加到现有项目 添加API文档 在敞篷下 下一步 作者:Mike Wasson 创建Web API时,创建帮助页面通常很有用,以便其他开发人员知道如何调用A ...
- ASP NET Web API 2框架揭秘
ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著 ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...
- Asp.Net Web API 2第一课——入门
前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎任何的平台都会有HTTP服务库.HTTP服务可以涉及到 ...
- ASP.NET Web API 特性
ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RES ...
- 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 原文:[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 注:本文是[ASP ...
- 生成用于ASP.NET Web API的C#客户端API
目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...
- 生成用于ASP.NET Web API的TypeScript客户端API
目录 介绍 备注 背景 推定(Presumptions) 使用代码 步骤0:将NuGet package WebApiClientGen和WebApiClientGen.jQuery安装到Web AP ...
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
最新文章
- Java 内存 关系_内存一致性 – 发生在Java之前的关系
- aspnet_Applications表结构
- Tableau10.0学习随记-分组问题
- 无法从外部连接MySQL_MySQL不能从外部 连接的解决方法
- 数字光端机和模拟视频光端机的六个不同点
- spring cloud(九):各组件常用配置参数
- c++折线平移算法_RSA笔记-蒙哥马利算法(1)
- C++ rand()函数和srand()函数
- abaqus分析用户手册单元卷_ABAQUS与你我的约定
- 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
- linux如何判断网线插入_快速鉴定网线质量的常用方法
- 听说社保不能补缴了,像我们这种没缴社保的打工者,该怎么办?
- access mysql 操作方法_操作ACCESS数据库注意事项
- [转载] python dict 查找原理
- 三菱gt3的序列号_WinXP sp3序列号大全
- Qt调用Com组件--QT调用COM组件DLL(dumpCPP工具)
- SQLite读写同步之WAL机制
- 各利不同网站的盈利模式
- TextView下划线的添加,控制下划线和文字的距离
- 网站快照被劫持,网站被劫持跳转另一个网站解决办法
热门文章
- SQL基础学习总结:1(数据库)
- python excel web_使用python在WEB页面上生成EXCEL文件
- jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
- 【工具软件】webstorm配置
- c语言中delay找不到标识符,51单片机的c语言,请问哪里错了?延时没有效果,但是编译又不报错。delay应该怎么写,怎么引用啊?...
- iOS KVO 的实现原理
- iOS通过Plist保存离线调试日志
- 10 个深恶痛绝的 Java 异常。。
- Netty 之 Zero-copy 的实现(下)
- Lintcode42 Maximum Subarray II solution 题解