ASP.NET MVCでETagをサポートするにはどうすればよいですか?
@ Elijah Gloverの回答 は回答の一部ですが、完全ではありません。これにより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
}
MVCのETAGは、WebFormsまたはHttpHandlersと同じです。
ETAG値を作成する方法が必要です。私が見つけた最良の方法は、ファイルMD5または ShortGuid を使用することです。
.netは文字列をETAGとして受け入れるため、次を使用して簡単に設定できます
String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);
[〜#〜] mix [〜#〜] のビデオ、最後にRESTでETAGを使用