【翻译】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()
        {

 

时间: 2024-10-13 21:53:07

【翻译】ASP.NET WEB API异常处理的相关文章

webapi-关于asp.net web api 异常处理返回统一致的json数据

问题描述 关于asp.net web api 异常处理返回统一致的json数据 项目开发中使用asp.net mvc 4 web api ,异常处理时遇到一个问题: 如果请求的路由不存在或http动作不匹配,框架默认返回了一个错误的son数据: {"Message": "未找到与请求 URI"http://localhost:8044/api/ClientType/get22"匹配的 HTTP 资源.","MessageDetail&q

【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理

原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. Exception Handling in ASP.NET Web API ASP.NET Web API中的异常处理 本文引自:http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling

【翻译】ASP.NET Web API是什么?

原文 [翻译]ASP.NET Web API是什么? 说明:随微软ASP.NET MVC 4一起发布的还有一个框架,叫做ASP.NET Web API.目前国内关注这项技术的人似乎还很少,这方面的文章也不多见.开发Web应用程序也许可以只用MVC这样的技术,而不用这项Web API技术,但如果用了,会给你的应用程序带来极大的好处.为此,本人转载并翻译了以下这篇文章,后面还会陆续翻译该项技术的一些官方教程.大家一起学习,共同提高. Microsoft ASP.NET: What's This Ne

8 种提升 ASP.NET Web API 性能的方法 【已翻译100%】

ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web API 性能的技术. 1) 使用最快的 JSON 序列化工具 JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响. 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了. 我测量过,Web API 的性能提升了20

【翻译】ASP.NET Web API入门

简介 ASP.NET Web API是一个可以简化创建HTTP服务的框架 它支持包括浏览器和移动设备在内的各种客户端 ASP.NET Web API是在.NET Framework上创建RESTful应用程序的理想平台 译者注:关于RESTful web服务可以参见这里:http://zh.wikipedia.org/wiki/REST 准备 ASP.NET MVC 4包括ASP.NET Web API,请在这里安装:http://www.asp.net/web-api 使用Visual Stu

Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]

原文:Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中] 前言 本来一直参见于微软官网进行学习的, 官网网址http://www.asp.net/web-api.出于自己想锻炼一下学习阅读英文文章的目的,又可以学习下微软新发布的技术,其实也很久了,但自己菜鸟一枚,对自己来说都是新技术了.鉴于以上两个原因,本人打算借助google翻译和有道词典,来翻译学习这个系列,并通过博客园来记录自己的翻译学习过程.由于自己阅读水平的确太菜,在借助工具的情况下,有时候搞出来的也是蹩脚的语句,

【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

原文:[ASP.NET Web API教程]6.2 ASP.NET Web API中的JSON和XML序列化 谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予"推荐".但前几天有人询问为何很久没有更新,这让我感觉把这文章翻译出来还是有价值的.为此,本人打算将此工作继续下去.这些关于Web API的技术文章均由微软专业人员撰写,虽然文章作为博客帖子而写得比较简单

【ASP.NET Web API教程】1 ASP.NET Web API入门

原文 [ASP.NET Web API教程]1 ASP.NET Web API入门 Getting Started with ASP.NET Web API第1章 ASP.NET Web API入门 摘自:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api In this chapter, you'll learn: The basics of building an HTTP service using

【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI

原文:[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 5: Creating a Dynamic UI with Knockout.js 第5部分:用Knockout.js创建动态UI 本文引自:http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with