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

  • 相关阅读:
    Boost Log : Trivial logging
    Boost Log : Definitions
    Boost Log : Setting up sinks
    Boost Log
    VS工程文件记录
    vs2017激活密钥
    JWT库
    Mac 使用 NFS 连接 Centos 上的共享文件夹
    Mahout源码目录说明
    linux中的线程同步:生产者、消费者问题
  • 原文地址:https://www.cnblogs.com/zhangpengnike/p/6169672.html
Copyright © 2011-2022 走看看