Web API Filter ActionFilterAttribute 使用

  WebApi 提供两种过滤器的类型:安全

一、ActionFilterAttributeide

二、exceptionFilterAttributespa

两个类都是抽象类,ActionFilter 主要实现执行请求方法体以前(覆盖基类方法:OnActionExecuting),和以后的事件处理(覆盖基类方法:OnActionExecuted)。exceptionFilter 主要实现出发异常方法(覆盖基类方法:OnException)。设计

过滤器在实际项目中都会常用到,例如:日志、安全验证、全局错误处理等。日志

下面写一个小例子:code

一、新建ActionFilterAttribute:blog

public class ActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            base.OnActionExecuting(actionContext);
            //获取请求消息提数据
            Stream stream = actionContext.Request.Content.ReadAsStreamAsync().Result;
            Encoding encoding = Encoding.UTF8;
            stream.Position = 0;
            string responseData = "";
            using (StreamReader reader = new StreamReader(stream, encoding))
            {
                responseData = reader.ReadToEnd().ToString();
            }
            //反序列化进行处理
            var serialize = new JavaScriptSerializer();
            var obj = serialize.Deserialize<RequestDTO>(responseData);
            //在action执行前终止请求时,应该使用填充方法Response,将不返回action方法体。
            if (obj == null)
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, obj);

            if (string.IsNullOrEmpty(obj.PhoneType) || string.IsNullOrEmpty(obj.PhoneVersion)
                || string.IsNullOrEmpty(obj.PhoneID) || obj.StartCity < 1)
            {
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, obj);
            }
        }
    }
View Code

二、在Api控制器的Action方法上加上[过滤器类],例如:[Filter.ActionFilter]事件

public class Mobile450Controller : ApiController
    {
    private DoWork450Invoke _DoWork = new DoWork450Invoke();
      
    [Uzai.Mobile.Filter.ActionFilter]
    [HttpPost]
    public RepProductTopicsList GetRecmdProductTopicsList(ReqProductTopicsList reqDTO)
    {
        return _DoWork.GetRecmdProductTopicsList(reqDTO);
    }
       
    }
View Code

 

之后会慢慢完善这篇文章,WebApi 的简单的例子,网上也很多,可是设计深刻开发和实际应用的少之又少,这方面的书籍也很少,你们能够上MSDN上寻求本身的答案。ip

相关文章
相关标签/搜索