zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    【贪心算法】POJ-3040 局部最优到全局最优
    【贪心算法】POJ-1017
    【贪心算法】POJ-2393 简单贪心水题
    【贪心算法】POJ-3190 区间问题
    项目选题报告(团队)
    结对项目第一次作业——原型设计
    第三次作业团队展示
    软工实践第二次作业——数独
    软件工程实践第一次作业--准备
    字符串
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5318703.html
Copyright © 2011-2022 走看看