• Asp.Net Api2 过滤器的使用


    1.注意:

       apiController控制器 对应的过滤器System.Web.Http.Filters.ActionFilterAttribute的过滤器

       MVC的Controller控制器 对应的过滤器System.Web.Http.Mvc.ActionFilterAttribute的过滤器

    2.实例1

    继承类ActionFilterAttribute

    public class FilterOneAttribute : ActionFilterAttribute
    {
        //执行前
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            base.OnActionExecuting(actionContext);
    
            //返回403拒绝
            HttpResponseMessage msg = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden, "服务器拒绝了你的请求");
            //设置相应对象,则不再执行Action
            actionContext.Response = msg;
    
            //返回500服务器错误
            HttpResponseMessage msg = actionContext.Request.CreateResponse(HttpStatusCode.InternalServerError, "您还没有登录");
            actionContext.Response = msg;
    
            //读取请求参数中的cookie
            HttpContextBase context = (HttpContextBase)actionContext.Request.Properties["MS_HttpContext"];
            string cookie = string.Join(",", context.Request.Cookies.AllKeys);
            HttpResponseMessage msg = actionContext.Request.CreateResponse(HttpStatusCode.OK, cookie);
            actionContext.Response = msg;
        }
    }

    实例2(转):

    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);
          }
        }
      }

    3.抽象类ActionFilterAttribute定义

        //
        // 摘要:
        //     表示所有操作筛选器特性的基类。
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
        public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IFilter
        {
            //
            // 摘要:
            //     初始化 System.Web.Http.Filters.ActionFilterAttribute 类的新实例。
            protected ActionFilterAttribute();
    
            //
            // 摘要:
            //     在调用操作方法之后发生。
            //
            // 参数:
            //   actionExecutedContext:
            //     操作执行的上下文。
            public virtual void OnActionExecuted(HttpActionExecutedContext actionExecutedContext);
            public virtual Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken);
            //
            // 摘要:
            //     在调用操作方法之前发生。
            //
            // 参数:
            //   actionContext:
            //     操作上下文。
            public virtual void OnActionExecuting(HttpActionContext actionContext);
            public virtual Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken);
        }
  • 相关阅读:
    自动检查出修改的代码 shell 做升级包 供观摩
    mysql 复制数据库
    docker 容器 日志占用空间过大问题处理
    react native ios启动指定模拟器
    React-Native Navigator-this.props.navigation....
    react-native 适配问题
    vsCode 开发微信小程序插件
    React-Native Navigator 过渡动画卡顿的解决方案
    JavaScript运行机制
    npm install Unexpected token in JSON at position XXX
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5318703.html
Copyright © 2020-2023  润新知