当前位置:   article > 正文

.NET Core拦截器_onresourceexecuting

onresourceexecuting

一、资源拦截器(IResourceFilter)

创建类,名称以Attribute结尾,继承Attribute父类、实现IResourceFilter接口

执行顺序: a、拦截器中的OnResourceExecuting方法

                        b、控制器构造函数、

                        c、控制器中的方法

                        d、拦截器中的OnResourceExecuting方法

例如一个请求路径为:https://localhost:44368/Authenticate/InterceptorTest

一个控制器:

  1. [ApiController]
  2. [Route("[Controller]")]
  3. public class AuthenticateController : ControllerBase
  4. {
  5. public AuthenticateController(IConfiguration configuration)
  6. {
  7. _configuration = configuration;
  8. }
  9. [ResourceFilter]
  10. [HttpGet("InterceptorTest")]
  11. public IActionResult InterceptorTest()
  12. {
  13. return Ok();
  14. }
  15. }

一个资源拦截器:

  1. public class ResourceFilterAttribute : Attribute, IResourceFilter
  2. {
  3. public static Dictionary<string, object> KeyValues = new Dictionary<string, object>();
  4. /// <summary>
  5. /// 请求之前
  6. /// </summary>
  7. /// <param name="context"></param>
  8. public void OnResourceExecuting(ResourceExecutingContext context)
  9. {
  10. string key = context.HttpContext.Request.Path; //请求的路径
  11. //获取请求来源的tonken进行解密
  12. string token = context.HttpContext.Request.Headers.Where(o => o.Key == "Authorization").FirstOrDefault().Value;
  13. string tokenstr = token.Split(' ')[1];
  14. if (KeyValues.ContainsKey(key))
  15. {
  16. //一旦context.result被赋值之后,就直接返回给请求方,不执行后面的所有内容(即控制器构造函数、action方法、OnResourceExecuted())
  17. //通常用来做缓存
  18. context.Result = (IActionResult)KeyValues[key];
  19. };
  20. }
  21. /// <summary>
  22. /// 请求之后
  23. /// </summary>
  24. /// <param name="context"></param>
  25. public void OnResourceExecuted(ResourceExecutedContext context)
  26. {
  27. string key = context.HttpContext.Request.Path; //请求的路径
  28. KeyValues[key] = context.Result;
  29. }
  30. }
  31. }

执行顺序就为:OnResourceExecuting(),AuthenticateController()、InterceptorTest(),OnResourceExecuted()

此拦截器可用来处理token解密获取资源,也可用来做缓存(利用给context.result赋值后就不执行后面构造函数、action方法、OnResourceExecuted()的特性)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/885571?site
推荐阅读
相关标签
  

闽ICP备14008679号