zoukankan      html  css  js  c++  java
  • Web API Filter ActionFilterAttribute 使用

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

    1、ActionFilterAttribute

    2、exceptionFilterAttribute

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

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

    下面写一个小例子:

    1、新建ActionFilterAttribute:

    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

    2、在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上寻求自己的答案。

  • 相关阅读:
    Web CI/CD Continuous Integration / Continuous Delivery / Continuous Deployment
    hd + TP-Link Switch / wanzhaojiaohuanji / spf+ / TL-ST1008F / TL-ST5016F
    彻底理解js中this的指向,不必硬背(转)
    H5本地存储(转)
    jquery获得 当前页面url的变量
    js中实现base64加密、解密
    项目中easyui-tooltip提示消息运用
    Jquery生成二维码(微信中长按图片识别二维码功能)
    [hdu 3068] Manacher算法O(n)最长回文子串
    Hello world !
  • 原文地址:https://www.cnblogs.com/zhangpengnike/p/6169672.html
Copyright © 2011-2022 走看看