ASP.Net MVC4 Mobile-Aware OutputCache
Я работаю над обновлением приложения от MVC3 до MVC4 и заметил, что что-то, что я предположил (надеялся?), "просто сработает".
CODE:
[OutputCache(Duration = 600, VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
Это пример кэширования учебников для ASP.Net. Всякий раз, когда браузер попадает на страницу, он проверяет кеш, чтобы узнать, существует ли что-то, генерирует представление, если нет, а затем отправляет кешированные результаты.
Это отлично работает; однако, играя с функцией Mobile view MVC4, я заметил, что приведенный выше код не проверяет, является ли запрос с мобильного устройства. Поэтому, если я удалю по этому маршруту на рабочем столе, на рабочем столе будет отображаться рабочий стол, пока кеш не будет отменен. Обратное также верно (если я впервые попал на страницу с телефоном, рабочий стол увидит вместо этого мобильный вид).
Есть ли параметр, который я мог бы использовать для выполнения этой работы, как я надеялся, или я смотрю на создание клиента OutputCacheProvider?
Ответы
Ответ 1
После немного более глубокой обработки я нашел решение проблемы.
Обновлено действие контроллера
[OutputCache(Duration = 600, VaryByCustom = "IsMobile")]
public ActionResult Index()
{
return View();
}
Переопределить GetVaryByCustomString в Global.asax
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.ToLowerInvariant() == "ismobile" && context.Request.Browser.IsMobileDevice)
{
return "mobile";
}
return base.GetVaryByCustomString(context, custom);
}
Ответ 2
Это правильный метод GetVaryByCustomString
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.ToLowerInvariant() == "ismobile")
{
return context.GetVaryByCustomStringForOverriddenBrowser();
}
return base.GetVaryByCustomString(context, custom);
}