Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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 mvc 如何在ASP.NET MVC中支持ETag?_Asp.net Mvc_Etag - Fatal编程技术网

Asp.net mvc 如何在ASP.NET MVC中支持ETag?

Asp.net mvc 如何在ASP.NET MVC中支持ETag?,asp.net-mvc,etag,Asp.net Mvc,Etag,如何在ASP.NET MVC中支持ETAG?MVC中的ETAG与WebForms或HttpHandler相同 您需要一种创建ETAG值的方法,我发现的最好的方法是使用文件MD5或 由于.net接受字符串作为ETAG,因此可以使用 String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw" Response.Cache.SetETag(etag); 最后,他们将ETAG与REST一起使用,这是答案的一部分,但并不完全。这将设置ETa

如何在ASP.NET MVC中支持ETAG?

MVC中的ETAG与WebForms或HttpHandler相同

您需要一种创建ETAG值的方法,我发现的最好的方法是使用文件MD5或

由于.net接受字符串作为ETAG,因此可以使用

String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);
最后,他们将ETAG与REST一起使用,这是答案的一部分,但并不完全。这将设置ETag,但是如果不在服务器端进行检查,您将无法获得ETag的好处。您可以通过以下方式实现:

var requestedETag = Request.Headers["If-None-Match"];
if (requestedETag == eTagOfContentToBeReturned)
        return new HttpStatusCodeResult(HttpStatusCode.NotModified);
另外,另一个技巧是您需要设置响应的可缓存性,否则默认情况下它是“私有”的,并且不会在响应中设置ETag:

Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
下面是一个完整的例子:

public ActionResult Test304(string input)
{
    var requestedETag = Request.Headers["If-None-Match"];
    var responseETag = LookupEtagFromInput(input); // lookup or generate etag however you want
    if (requestedETag == responseETag)
        return new HttpStatusCodeResult(HttpStatusCode.NotModified);

    Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
    Response.Cache.SetETag(responseETag);
    return GetResponse(input); // do whatever work you need to obtain the result
}

我认为这是错误的!因为添加一个静态ETag就像是说你的内容永远不会改变。ETags的想法是让浏览器知道内容已更改,类似于过期标题..我认为harcoded值仅用于说明目的。。。你可以在飞行中创造一些东西并改变它。一提到使用MD5,就意味着它是经过计算的(可能只有在每次更改或运行时)并返回的。这显然不是一个使用静态值的建议。这是一个很好的答案,对于那些想要实现它的人来说,我建议实现一个抽象的ActionFilter来实现这个测试逻辑,以及一个名为“abstract string CalculateTag(HttpRequest)”的抽象方法,在需要Etag支持的情况下对它进行子类化。这将使您的操作方法“精简”,并使测试etag生成更容易。ETAGOFCONTENTTOBERETURN中的存储是什么?如何为每个操作生成etag?