asp.net-mvc - VaryByParam ="*"是否也读取 RouteData.Values?

标签 asp.net-mvc asp.net-mvc-3 outputcache

在我的 asp.net mvc 项目中,我在 Controller 上启用输出缓存,如下所示

[OutputCache(Duration = 100, VaryByParam = "*", VaryByHeader = "X-Requested-With")]
public class CatalogController : BaseController
{
    public ActionResult Index(string seller)
    {
        // I do something
    }
}

它工作得很好,直到创建我自己的 Route 类,如下所示

public class MyRoute : Route
{
    // there is a constructor here..

    // I override this method.. 
    // just to add one data called 'seller' to RouteData
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var data = base.GetRouteData(httpContext);
        if (data == null) return null;

        var seller = DoSomeMagicHere();

        // add seller
        data.Values.Add("seller", seller);

        return data;
    }

}

然后,action 方法将以 seller 作为参数。我通过始终提供不同的 seller 参数来测试它,但它从缓存中获取输出而不是调用该方法。

在 asp.net mvc 中,设置 VaryByParam="*"是否也会因 RouteData.Values 而异?

我正在使用 ASP.Net 4 MVC 3 RC 2

最佳答案

输出缓存机制因 URL、查询字符串和表单而异。 RouteData.Values 此处未表示。原因是输出缓存模块在路由之前运行,因此当第二个请求到来并且输出缓存模块正在寻找匹配的缓存条目时,它甚至没有要检查的 RouteData 对象.

通常这不是问题,因为 RouteData.Values 直接来自 URL,该 URL 已被考虑在内。如果您想根据某个自定义值进行更改,请使用 VaryByCustomGetVaryByCustomString来实现这一点。

关于asp.net-mvc - VaryByParam ="*"是否也读取 RouteData.Values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518671/

相关文章:

asp.net-mvc - 是什么触发了 MVC JSON Get 阻塞 - 间歇性工作

C# 数据库访问 : Best method to use for getting data

iis - 输出缓存总命中数未反射(reflect)在 IIS 性能监视器中

asp.net - 从输出缓存中排除动态渲染的用户控制

ASP.NET 输出缓存和回发

.net - 如何使用asp .net web api、 Entity Framework 和json(代码优先)来回带关系的对象?

c# - 在没有属性的类上全局使用 JsonConverter

c# - MVC Controller : Using LINQ to check for duplicate value already existing in table before Save?

asp.net-mvc - MVC3 如何禁用/启用 ActionLink

c# - LINQ - 无法使用 WHERE 条件创建