首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CacheCow实现基于参数的缓存

使用CacheCow实现基于参数的缓存
EN

Stack Overflow用户
提问于 2017-05-17 05:59:10
回答 1查看 91关注 0票数 1

我在我的控制器中有一个webapi端点,如下所示:

代码语言:javascript
复制
[HttpGet]
    public IHttpActionResult GetPerson(
      string term = null,
      string workspace = null)
    {
        try
        {
            logger.Info("AvPerson start: " + DateTime.Now);
            if (term == null)
            {
                return BadRequest();
            }

            ICoreAVData api = MvcApplication.Container.Resolve<ICoreAVData>();

            List<Person> persons = new List<Person>();
            persons.AddRange(api.GetAllPersonsForTerm(term, workspace));

            if (persons == null)
            {
                return NotFound();
            }

            return Ok(persons);
        }
        catch (Exception)
        {
            return InternalServerError();
        }
    }

term参数可以不断变化,但workspace参数会显示与用户相关的内容。用户不会离开自己的工作区,因此从用户的角度来看,该参数将是常量。

我想知道是否可以基于工作区参数进行CacheCow缓存。即。如果为workpace1,则缓存它,如果为workspace2,则单独缓存它。

我认识到,我必须添加某种逻辑来使特定于工作区缓存无效。我不是在问这个问题,因为我相信我知道该怎么做。我想知道每个工作区参数是否可以有一个单独的缓存项。

以下是我对此控制器的路由设置:

代码语言:javascript
复制
config.Routes.MapHttpRoute(
          name: "avperson",
          routeTemplate: "api/v1/avperson/{action}/{id}",
          defaults: new { controller = "avperson", id = RouteParameter.Optional }

       );

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 21:45:46

因此,解决方案是更改路由。

代码语言:javascript
复制
config.Routes.MapHttpRoute(
      name: "avperson",
      routeTemplate: "api/v1/{workspace}/avperson/{action}/{id}",
      defaults: new { controller = "avperson", workspace = "all", id = RouteParameter.Optional }
);

这样做将为每个工作区创建一个单独的缓存条目,然后可以根据需要进行验证或使其无效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44012308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档