当一个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异常处理相关推荐

  1. 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 ...

  2. Web API 2 入门——创建ASP.NET Web API的帮助页面(谷歌翻译)

    在这篇文章中 创建API帮助页面 将帮助页面添加到现有项目 添加API文档 在敞篷下 下一步 作者:Mike Wasson 创建Web API时,创建帮助页面通常很有用,以便其他开发人员知道如何调用A ...

  3. ASP NET Web API 2框架揭秘

    ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...

  4. Asp.Net Web API 2第一课——入门

    前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎任何的平台都会有HTTP服务库.HTTP服务可以涉及到 ...

  5. ASP.NET Web API 特性

    ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RES ...

  6. 【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 ...

  7. 生成用于ASP.NET Web API的C#客户端API

    目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...

  8. 生成用于ASP.NET Web API的TypeScript客户端API

    目录 介绍 备注 背景 推定(Presumptions) 使用代码 步骤0:将NuGet package WebApiClientGen和WebApiClientGen.jQuery安装到Web AP ...

  9. ASP.NET Web API 开篇示例介绍

    ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...

最新文章

  1. Java 内存 关系_内存一致性 – 发生在Java之前的关系
  2. aspnet_Applications表结构
  3. Tableau10.0学习随记-分组问题
  4. 无法从外部连接MySQL_MySQL不能从外部 连接的解决方法
  5. 数字光端机和模拟视频光端机的六个不同点
  6. spring cloud(九):各组件常用配置参数
  7. c++折线平移算法_RSA笔记-蒙哥马利算法(1)
  8. C++ rand()函数和srand()函数
  9. abaqus分析用户手册单元卷_ABAQUS与你我的约定
  10. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
  11. linux如何判断网线插入_快速鉴定网线质量的常用方法
  12. 听说社保不能补缴了,像我们这种没缴社保的打工者,该怎么办?
  13. access mysql 操作方法_操作ACCESS数据库注意事项
  14. [转载] python dict 查找原理
  15. 三菱gt3的序列号_WinXP sp3序列号大全
  16. Qt调用Com组件--QT调用COM组件DLL(dumpCPP工具)
  17. SQLite读写同步之WAL机制
  18. 各利不同网站的盈利模式
  19. TextView下划线的添加,控制下划线和文字的距离
  20. 网站快照被劫持,网站被劫持跳转另一个网站解决办法

热门文章

  1. SQL基础学习总结:1(数据库)
  2. python excel web_使用python在WEB页面上生成EXCEL文件
  3. jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
  4. 【工具软件】webstorm配置
  5. c语言中delay找不到标识符,51单片机的c语言,请问哪里错了?延时没有效果,但是编译又不报错。delay应该怎么写,怎么引用啊?...
  6. iOS KVO 的实现原理
  7. iOS通过Plist保存离线调试日志
  8. 10 个深恶痛绝的 Java 异常。。
  9. Netty 之 Zero-copy 的实现(下)
  10. Lintcode42 Maximum Subarray II solution 题解