في ASP.NET ، هل من الممكن إخراج ذاكرة التخزين المؤقت باسم المضيف؟ أي varybyhost أو varbyhostheader؟
-
25-09-2019 - |
سؤال
لدي موقع ويب يحتوي على عدد من الرؤوس المضيفة. يعتمد السمة والبيانات على رأس المضيف ، وتحميل المضيفين المختلفين مواقع مختلفة المظهر.
لذلك دعونا نتخيل أن لدي موقع ويب يسمى "فو" يعيد نتائج البحث. نفس الرمز يدير كلا الموقعين المدرجين أدناه. إنها نفس الخادم والموقع (باستخدام الرؤوس المضيفة)
www.foo.com
www.foo.com.au
الآن ، إذا ذهبت إلى .com
, ، الموقع تحت عنوان باللون الأزرق. إذا ذهبت إلى .com.au
الموقع ، هو تحت عنوان باللون الأحمر.
والبيانات مختلفة عن نتيجة البحث نفسها ، بناءً على اسم المضيف: نتائج الولايات المتحدة .com
والنتائج الأسترالية ل .com.au
.
إذا كنت أرغب في استخدام OutputCaching
, ، هل يمكن التعامل مع هذا وتقسيمه باسم المضيف؟
أنا قلق من أنه بعد أن يذهب الشخص إلى .com
الموقع ، (يعيدنا بشكل صحيح النتائج) أن الشخص الثاني يزور .com.au
الموقع والبحث عن نفس البيانات سيحصلون على السمة ونتائج .com
موقع.
هل التخزين المؤقت ممكن؟
المحلول
نعم ، يمكنك "تختلف حسب العرف". أنا أستخدم نفس الشيء:
ضع ما يلي في global.asax.cs:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "Host")
{
return context.Request.Url.Host;
}
return String.Empty;
}
ثم في وحدة التحكم الخاصة بك:
[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
return View();
}
نصائح أخرى
تفحص ال varybycustom معلمة OutputCache التوجيه.
لتحديد ما يحدث عندما يتم استدعاء VaryByCustom ، تحتاج إلى تجاوز طريقة GetVaryByCustomString:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if(custom == "Your_Custom_Value")
{
// Do some validation.
// Return a string for say, .com, or .com.au
}
return String.Empty;
}
المفتاح هو إرجاع قيمة السلسلة لكل مثيل تريد ذاكرة التخزين المؤقت. في حالتك ، ستحتاج طريقتك المفرطة إلى تجريد الجزء ".com" أو ".com.au" من عنوان URL وإعادته. كل قيمة مختلفة تنتج ذاكرة التخزين المؤقت المختلفة.
HTH