내 MVC 사이트에서 내 페이지를 제공하는 데 적합한 접근 방식으로 51도를 사용하고 있습니다. 모두 잘 작동합니다.휴대 기기가 데스크톱 사이트를 요청하고 있는지 확인하십시오.
나는 최근에 출력 캐싱을 추가하고 나는 모바일 또는 데스크톱 여부를 확인하기 위해VaryByCustom
를 사용
: 나는 최초의 모바일 사용자가 사이트를 탐색 할 경우는 문제로 실행 한 그러나
public override string GetVaryByCustomString(HttpContext context, string custom)
{
// this is for the output cache
if (context != null)
{
switch (custom)
{
case "Mobile":
return GetMobileCustomString(context);
}
}
return base.GetVaryByCustomString(context, custom);
}
private static string GetMobileCustomString(HttpContext context)
{
if (context.Request.Browser.IsMobileDevice)
{
return "IsMobile";
}
else
{
return "IsDesktop";
}
}
요청했다 데스크톱 버전에서는 모든 모바일 사용자에게 캐시됩니다.
GetMobileCustomString
을 변경하여 데스크톱 사이트를 요청하는 모바일인지 확인해야합니다. 이 일을 할 수있는 방법이 있습니까? 이 아니었다 내가 가진 것처럼 바탕 화면 페이지를 일으키는 첫 번째로드가 캐시 할, 첫째
: 현상금이 일에 오픈 한 바와 같이
업데이트
, 나는 내가 업데이 트를 제공 할 것이라고 생각 처음에는 생각했기 때문에 많은 검색, 연구 및 테스트를 해본 결과, 모바일 페이지 (MVC 5에있는 경우)에 대해 데스크톱 페이지를 캐시해서는 안됩니다. 나는 모바일 요청을 할 때 코드를 밟았으며 사용자 정의에 따라 다양하게 변하면 context.Request.Browser.IsMobileDevice
을 false
으로 표시합니다.
모바일 사이트를 위해 데스크톱 사이트가 캐싱되는 원인을 잘 모름 - 아마도 bug in MVC 4의 숙취입니다. 그냥 무작위로 (즉, 언젠가는 괜찮을 것이고 다음에 어떤 이유로 데스크톱 사이트를 제공 할 다른 날이 될 것입니다.) 앱 풀 재활용은 항상 문제를 해결할 것입니다.
나는 또한 내가 사용하여 오버라이드 (override) 브라우저를 얻을 수 있다는 것을 발견
using System.Web.Wepages;
context.Request.RequestContext.HttpContext.GetOverriddenBrowser();
그러나이 많이 사용 될 것 같지 않았다
그것은 당신이 작동해야하는 일처럼 날 것으로 보인다
데스크톱/모바일 앱 및 요청을 변경할 수있는 권한이 있습니까? 어쩌면 당신은 HTTP 요청의 사용자 에이전트를 설정하고 그것을 읽을 수 있습니다. –
내장 된 방법이 없으므로 검색 할 때 브라우저를 명시 적으로 설정할 수있는 곳을 찾았습니다. http://stackoverflow.com/questions/16080593/mvc4-force-mobile-site-for-all- 요청 (데스크톱 포함). 당신이 그것을 설정할 수 있다면, 그것을 얻을 수있는 방법이 없을까요? – Pete
hmmm, 그 브라우저 오버라이드에 대해 더 많은 것을 보았을 때 오버 라이드가 단지 const 문자열에 의해 설정되는 것 같습니다 : https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web .WebPages/BrowserHelpers.cs – Pete