Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何仅对特定参数使用OutputCache?_Asp.net_Asp.net Mvc_Outputcache - Fatal编程技术网

Asp.net 如何仅对特定参数使用OutputCache?

Asp.net 如何仅对特定参数使用OutputCache?,asp.net,asp.net-mvc,outputcache,Asp.net,Asp.net Mvc,Outputcache,我有一个OutputCache的例子。 我的问题是,我只想在[id]等于NULL时缓存页面。在所有其他情况下,我根本不想要缓存 MyController: [OutputCache(Duration = int.MaxValue, VaryByParam = "id")] public ActionResult Details(int id) {} 路线图: routes.MapRoute( name: "edit", url: "edit/{id}", default

我有一个OutputCache的例子。 我的问题是,我只想在
[id]
等于
NULL
时缓存页面。在所有其他情况下,我根本不想要缓存

MyController:

[OutputCache(Duration = int.MaxValue, VaryByParam = "id")]
public ActionResult Details(int id)
{}
路线图:

routes.MapRoute(
    name: "edit",
    url: "edit/{id}",
    defaults: new {
        controller = "asd",
        action = "Details",
        id = UrlParameter.Optional
    }
);
您可以指定(并实现)OutputCacheAttribute的
VaryByCustom
参数:

MyController.cs

[OutputCache(Duration = int.MaxValue, VaryByCustom = "idIsNull")]
public ActionResult Details(int id)
{
}
public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg.ToLower() == "idisnull")
    {
        return string.IsNullOrWhiteSpace(Request.QueryString["id"])
            ? string.Empty
            // unique key means it won't have a consistent value to use
            // as a cache lookup
            : ((new DateTime(1970, 1, 1) - DateTime.Now).TotalMilliseconds).ToString();
    }
}
Global.asax.cs

[OutputCache(Duration = int.MaxValue, VaryByCustom = "idIsNull")]
public ActionResult Details(int id)
{
}
public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg.ToLower() == "idisnull")
    {
        return string.IsNullOrWhiteSpace(Request.QueryString["id"])
            ? string.Empty
            // unique key means it won't have a consistent value to use
            // as a cache lookup
            : ((new DateTime(1970, 1, 1) - DateTime.Now).TotalMilliseconds).ToString();
    }
}

谢谢,但是[id]不是查询字符串。请参见“编辑布线”details@user1615362:我看不到它在路由
url
中定义,所以有什么问题吗?这是NullOrWhiteSpace(Request.QueryString[“id”])将始终为真。根本没有QueryString参数,我使用的是restful url,[id]是一个url段。@user1615362:再一次……不符合您的路由。我在该路径的任何地方都看不到
{id}
,因此它要么是一个POST值(在这种情况下应该使用
Request.Form
),要么是一个GET变量(坚持使用
Request.QueryString
)。