[Asp.Net Core]Resource扩展定制支持缓存
Posted 厦门德仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]Resource扩展定制支持缓存相关的知识,希望对你有一定的参考价值。
ResourceFilter
就是为了缓存而存在。。。
之前在ActionFilter 需执行controller实列化。ResourceFilter 则不需要。这样可以减少性能损失,提高效率。
CustomResourceFilterAttribute
public class CustomResourceFilterAttribute : Attribute, IResourceFilter
private static Dictionary<string, object> CacheDictionary = new Dictionary<string, object>();
/// <summary>
/// 在XX资源之前
/// </summary>
/// <param name="context"></param>
public void OnResourceExecuting(ResourceExecutingContext context)
string key = context.HttpContext.Request.Path;
if (CacheDictionary.Any(item => item.Key == key))
//断路器,只要是对Result赋值,就不继续往后走了;
context.Result = CacheDictionary[key] as IActionResult;
Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuting");
/// <summary>
/// 在xx资源之后
/// </summary>
/// <param name="context"></param>
public void OnResourceExecuted(ResourceExecutedContext context)
//到了这里,肯定已经完成了计算了;
string key = context.HttpContext.Request.Path;
CacheDictionary[key] = context.Result;
Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuted");
Controller
[CustomResourceFilter]
public IActionResult IndexResourceTest()
ViewBag.Date = DateTime.Now;
return View();
测试
1.直接进入OnActionExecuting,跳过controller构造函数
2. 进入controller构造函数
3. 因为是第一次请求,缓存中没有数据。
4.执行Action方法,进行逻辑计算。。。。
5.OnResourceExcecuted方法写入缓存
6.视图
7.第二次刷新页面,缓存存在数据,断路器返回
8.控制器生成时间则返回缓存的数据。
以上是关于[Asp.Net Core]Resource扩展定制支持缓存的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义位置时如何在 asp.net core mvc 中指定视图位置?
先定一个小目标Asp.net Core 在IIS上的托管运行