سؤال

كيف يمكنني دعم Etags في ASP.NET MVC؟

هل كانت مفيدة؟

المحلول

الإجابة Lijah Glover هو جزء من الجواب، ولكن ليس فقط كاملة. سيؤدي ذلك إلى تعيين ETAG، لكنك لا تحصل على فوائد Etags دون التحقق من ذلك على جانب الخادم. أنت تفعل ذلك مع:

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 في MVC هي نفس WebForms أو httphanders.

تحتاج إلى طريقة لإنشاء قيمة ETAG، وأفضل طريقة وجدتها تستخدم ملف MD5 أو مختصر.

منذ .NET يقبل سلسلة ك etag، يمكنك ضبطه بسهولة باستخدام

String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);

فيديو من مزج, في النهاية يستخدمون eTag مع الراحة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top