65

ASP.NET MVCでETagをサポートするにはどうすればよいですか?

4

2 に答える 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 に答える