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

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

错误代码为500的服务错误

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

你也可以自定义错误码

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

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

(页面未找到)

  1. public Product GetProduct(int id)
  2. {
  3. Product item = repository.Get(id);
  4. if (item == null)
  5. {
  6. throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
  7. }
  8. return item;
  9. }
 

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

可以通过如下方法来完成

  1. public Product GetProduct(int id)
  2. {
  3. Product item = repository.Get(id);
  4. if (item == null)
  5. {
  6. var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
  7. {
  8. Content = new StringContent(string.Format("No product with ID = {0}", id)),
  9. ReasonPhrase = "Product ID Not Found"
  10. }
  11. throw new HttpResponseException(resp);
  12. }
  13. return item;
  14. }
 

结果如下图所示

另外

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

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

并不单单是HttpResponseException

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

  1. using System;
  2. using System.Net;
  3. using System.Net.Http;
  4. using System.Web.Http.Filters;
  5.  
  6. public class NotImplExceptionFilter : ExceptionFilterAttribute
  7. {
  8. public override void OnException(HttpActionExecutedContext context)
  9. {
  10. if (context.Exception is NotImplementedException)
  11. {
  12. context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
  13. }
  14. }
  15. }
 

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

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

  1. public class WebApiApplication : System.Web.HttpApplication
  2. {
  3. static void ConfigureApi(HttpConfiguration config)
  4. {
  5. config.Filters.Add(new HelloWebAPI.Controllers.NotImplExceptionFilter());
  6. }
  7. protected void Application_Start()
  8. {
  9. AreaRegistration.RegisterAllAreas();
  10.  
  11. ConfigureApi(GlobalConfiguration.Configuration);
  12. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  13. RouteConfig.RegisterRoutes(RouteTable.Routes);
  14. BundleConfig.RegisterBundles(BundleTable.Bundles);
  15. }
  16. }
 

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

运行的效果如下

另外

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

也可以使用特性的写法

  1. [NotImplExceptionFilter]
  2. public IEnumerable<Product> AllProducts()
  3. {
 

WEB API异常处理的更多相关文章

  1. Asp.Net Web API 2第七课——Web API异常处理

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来讲解Asp.Ne ...

  2. Web API 异常处理

    Web Api的ExceptionFilter只能截获并处理Action执行过程中发生的异常,在Action执行过程之外如果出现异常,ExceptionFilter是无能为力的. 这些异常包括: 1. ...

  3. ASP.NET mvc4 WEB API异常处理

    当一个web api抛出一个异常后 此异常会被转化成一个HTTP响应 错误代码为500的服务错误 但是如果你不想让客户端看到500的错误码 你也可以自定义错误码 如下代码当用户输入的ID没有与之相关的 ...

  4. ASP.NET Web API 异常处理 HttpResponseException 以及Angularjs获取异常信息并提示

    一.HttpResponseException 如果一个Web API控制器抛出一个未捕捉异常,默认地,大多数异常都会被转化成一个带有状态码“500 – 内部服务器错误”的HTTP响应.HttpRes ...

  5. Web API系列(三) 异常处理

    在上一篇教程中我为大家介绍了Web API中Filter的开发使用,其中讲到ExceptionFilter时留了一个坑:ExceptionFilter只能截获并处理Action执行过程中发生的异常,在 ...

  6. ASP.NET Web API系列教程目录

    ASP.NET Web API系列教程目录 Introduction:What's This New Web API?引子:新的Web API是什么? Chapter 1: Getting Start ...

  7. Web API 2

    Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]   前言 本来一直参见于微软官网进行学习的, 官网网址http://www.asp.net/web-api.出于自己想锻炼一下学 ...

  8. ASP.NET Web API系列教程(目录)(转)

    注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP.NET Web API.这是一个用来在.NET平台上建立HTTP服务的Web API框架,是微软的又一项令人振奋的技术.目前,国内 ...

  9. [转]ASP.NET Web API系列教程(目录)

    本文转自:http://www.cnblogs.com/r01cn/archive/2012/11/11/2765432.html 注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP ...

随机推荐

  1. jQuery动画效果animate和scrollTop结合使用实例

    CSS属性值是逐渐改变的,这样就可以创建动画效果.只有数字值可创建动画(比如 "margin:30px").字符串值无法创建动画(比如 "background-color ...

  2. javascript语法速查表

  3. 【转载】浅谈HTTP中Get与Post的区别

    [转载]http://www.cnblogs.com/hyddd/ Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们 ...

  4. 【UOJ #244】【UER #7】短路

    http://uoj.ac/contest/35/problem/244 对其他人来说好简单的一道题,我当时却不会做TWT 注定滚粗啊 题解很好的~ #include<cstdio> #i ...

  5. 为Debian/Ubuntu的apt-get install添加自动补齐/完成功能

    Debian/Ubuntu的apt-get太常用了,不过偶尔可能也会碰到不太熟悉,想不起来的包的名称,除了去debian packages去查找,另外的方法就是给Debian/Ubuntu添加自动补齐 ...

  6. Ubuntu使用MyEclipse闪退的解决办法

    修改myeclipse.ini文件, -Xmx512m-XX:MaxPermSize=512m-XX:ReservedCodeCacheSize=256m-Dosgi.nls.warnings=ign ...

  7. jsp如何自定义tag的标签库?

    虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...

  8. 【Codeforces715C&716E】Digit Tree 数学 + 点分治

    C. Digit Tree time limit per test:3 seconds memory limit per test:256 megabytes input:standard input ...

  9. RAM、DRAM、SD卡

    catalogue . ROM.RAM.DRAM.SRAM和FLASH的区别 . 内存工作原理 . DRAM基本结构与原理 . SD卡基本结构与原理 1. ROM.RAM.DRAM.SRAM和FLAS ...

  10. linux之svn

    sudo apt-get install subversion 实践出真理