Asp.net Web Api添加异常筛选器

时间:2022-02-10 03:16:22

一.定义一个异常筛选器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Filters;
using System.Net;
using System.Net.Http;

namespace WebApi
{
    public class NotImplExceptionFilter:ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext context)
        {
            if (context.Exception is NotImplementedException)
            {
                context.Response = new HttpResponseMessage(HttpStatusCode.NotFound);
            }
        }
    }
}

注意:HttpStatusCode.NotFound 状态码只是随意定的,我这里

二.引用过滤器

(1)全局使用(对所有Action有效),在Global.asax中注册异常筛选器,如下

public class WebApiApplication : System.Web.HttpApplication
    {

protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

    GlobalConfiguration.Configuration.Filters.Add(new NotImplExceptionFilter());
        }
    }

(2)指定Action使用

        [NotImplExceptionFilter]

        public IEnumerable<Contact> Get(string id = null)
        {

    ...

    throw new NotImplementedException("This method is not implemented");

        }

三.控制器的Action加引用
        public IEnumerable<Contact> Get(string id = null)
        {
            var thecontact= from contact in contacts
                   where contact.Id == id || string.IsNullOrEmpty(id)
                   select contact;
            if (thecontact == null || thecontact.Count()==0)
            {
                var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
                {
                    Content = new StringContent(string.Format("No product with ID={0}", id)),
                    ReasonPhrase = "Product ID Not Found"
                };
                throw new NotImplementedException("This method is not implemented");
            }
            return thecontact;
        }

Asp.net Web Api添加异常筛选器