如何使来自另一个控制器的Web API缓存无效(ASP.NET Web API CacheOutput库)

苏雷什

我为我的asp.net项目的Web API使用了ASP.NET Web API CacheOutput库,它可以正常工作,但是在我有POST方法的地方有另一个控制器,我想使该控制器的缓存无效。

[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
    }
}

当员工控制器中有add \ update时,我想使员工缓存无效。

贾科梅利

这有点棘手,但是您可以通过以下方式获得它:

1.在您的WebApiConfig上:

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

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

2.创建一个WebApiCacheHelper类:

using System;
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());
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何编写.net Web API控制器以使用和公开另一个Web API

Web API访问控制器方法来自另一个控制器方法

从另一个访问一个Web API控制器

直接从另一个Web API控制器内部调用另一个Web API控制器

如何将 ASP.NET Core 5 Web API 控制器操作的失败模型验证结果包装到另一个类中并将响应返回为 OK

如何将一个Web api控制器方法调用到另一个Web api项目中?

重定向到另一个Web应用程序ASP.NET Core中的控制器

ASP.NET Core 2.0 Web API响应缓存

缓存ASP.NET MVC Web API结果

使用Asp.net核心创建到另一个Web API的代理

与REST和.Net Web Api混淆-每个控制器是否应该有一个GET?

同名控制器的asp.net Web API路由

忽略ASP.NET Web API中的控制器

如何在一个Web API控制器中获取两个模型?

将文件从ASP.NET Core Web API发布到另一个ASP.NET Core Web API

从另一个Web API调用Web API

从另一个Web API调用Web API

从另一个Web API调用Web API

如何在ASP.NET Web API应用程序中从另一个方法调用一个异步方法

带数据库连接的asp.net WEB API

ASP.Net Web API存储库更新错误500

Asp.net核心-类库上的Web Api

显示来自ASP.NET MVC中另一个控制器的视图

.net core web api 重定向到另一个页面

如何在 ASP.NET 核心 WEB API 控制器中获取 OpenID 信息

在ASP.Net Web API控制器中如何查找用户名?

如何在Asp.net Web Api中的url参数中发送控制器动作?

如何在 ASP Net Core 中授权 Web API 控制器

如何在 Web API 控制器中读取 ASP.NET_SessionId?