gpt4 book ai didi

asp.net-mvc - 如何从另一个 Controller 使 Web API 缓存失效(ASP.NET Web API CacheOutput Library)

转载 作者:行者123 更新时间:2023-12-01 23:33:53 25 4
gpt4 key购买 nike

我已经在我的 asp.net Web API 项目中使用了 ASP.NET Web API CacheOutput 库,它工作正常,但是有另一个 Controller ,我有一个 POST 方法,我想使该 Controller 的缓存无效。

[AutoInvalidateCacheOutput]
public class EmployeeApiController : ApiController
{
[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 100)]
public IEnumerable<DropDown> GetData()
{
//Code here
}
}


public class EmployeesController : BaseController
{
[HttpPost]
public ActionResult CreateEmployee (EmployeeEntity empInfo)
{
//Code Here
}
}

当员工 Controller 中有添加\更新时,我想使员工缓存失效。

最佳答案

这有点棘手,但你可以通过以下方式得到它:

<强>1。在您的 WebApiConfig 上:

// Registering the IApiOutputCache.    
var cacheConfig = config.CacheOutputConfiguration();
cacheConfig.RegisterCacheOutputProvider(() => new MemoryCacheDefault());

我们需要它从 GlobalConfiguration.Configuration.Properties 获取 IApiOutputCache,如果我们让默认属性设置发生,则 MVC BaseController 请求中将不存在具有 IApiOutputCache 的属性。

<强>2。创建一个WebApiCacheHelper类:

using System;
using System.Linq.Expressions;
using System.Web.Http;
using WebApi.OutputCache.Core.Cache;
using WebApi.OutputCache.V2;

namespace MideaCarrier.Bss.WebApi.Controllers
{
public static class WebApiCacheHelper
{
public static void InvalidateCache<T, U>(Expression<Func<T, U>> expression)
{
var config = GlobalConfiguration.Configuration;

// Gets the cache key.
var outputConfig = config.CacheOutputConfiguration();
var cacheKey = outputConfig.MakeBaseCachekey(expression);

// Remove from cache.
var cache = (config.Properties[typeof(IApiOutputCache)] as Func<IApiOutputCache>)();
cache.RemoveStartsWith(cacheKey);
}
}
}

<强>3。然后,从您的EmployeesController.CreateEmployee操作中调用它:

public class EmployeesController : BaseController
{
[HttpPost]
public ActionResult CreateEmployee (EmployeeEntity empInfo)
{
// your action code Here.
WebApiCacheHelper.InvalidateCache((EmployeeApiController t) => t.GetData());
}
}

关于asp.net-mvc - 如何从另一个 Controller 使 Web API 缓存失效(ASP.NET Web API CacheOutput Library),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com