ASP.NET MVCでETagをサポートするにはどうすればよいですか?
25652 次
2 に答える
46
@Elijah Gloverの回答は回答の一部ですが、完全ではありません。これにより ETag が設定されますが、サーバー側で確認しないと ETag のメリットを享受できません。あなたはそれを行います:
var requestedETag = Request.Headers["If-None-Match"];
if (requestedETag == eTagOfContentToBeReturned)
return new HttpStatusCodeResult(HttpStatusCode.NotModified);
また、もう 1 つのヒントは、応答のキャッシュ可能性を設定する必要があることです。そうしないと、デフォルトで「プライベート」になり、応答に 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
}
于 2013-07-15T16:08:07.000 に答える
30
MVC の ETAG は、WebForms または HttpHandlers と同じです。
ETAG 値を作成する方法が必要です。私が見つけた最良の方法は、 File MD5 またはShortGuidを使用することです。
.net は文字列を ETAG として受け入れるため、次を使用して簡単に設定できます。
String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);
MIXからのビデオ、最後に REST で ETAG を使用
于 2009-06-02T02:32:56.933 に答える