3

我还没有找到明确的答案,所以有人可以帮助我吗?

如果我们有这样的 URL

 www.website.com/results.aspx?listingtype=2&propertytype=1&location=alaska

然后我们可以设置

 <%@ OutputCache Duration="120" VaryByParam="listingtype;propertytype;location" %>

但是我使用路由,所以我的 url 看起来像这样:

 www.website.com/buy/houses/alaska

或者例如

 www.website.com/rent/condominiums/nevada

如何在 VaryByParam 中使用 RouteValues,或者我可以从代码隐藏中设置它还是如何设置?我没有使用 MVC,这是一个 ASP.NET 网站

4

1 回答 1

4

编辑:(对于非 ASP.NET MVC 应用程序)

这个怎么样:

使 OutputCache 定义如下:


<%@ OutputCache Duration="120" VaryByParam="None" VaryByCustom="listingtype;propertytype;location" %>

在 Global.asax.cs 添加这些方法:


public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "lisingtype")
    {
        return GetParamFromRouteData("listingtype", context);
    }

    if (custom == "propertytype")
    {
        return GetParamFromRouteData("propertytype", context);
    }

    if (custom == "location")
    {
        return GetParamFromRouteData("location", context);
    }

    return base.GetVaryByCustomString(context, custom);
}

private string GetParamFromRouteData(string routeDataKey, HttpContext context)
{
    object value;

    if (!context.Request.RequestContext.RouteData.Values.TryGetValue(routeDataKey, out value))
    {
        return null;
    }

    return value.ToString();
}

旧内容:

如果您只是将 OutputCache 放在您的操作方法上,并使您的所有路由部分成为您操作方法的一部分,则如下所示:


[OutputCache]
public ActionResult FindProperties(string listingtype, string propertytype, string location)
{
}

框架会自动为您更改这些项目的缓存(请参阅:http ://aspalliance.com/2035_Announcing_ASPNET_MVC_3_Release_Candidate_2_.4 )

于 2012-05-13T07:04:41.503 回答