2012-10-14 2 views
1

내 컨트롤러 동작 위에 OutputCache 특성을 정의하여 서버가 다른 사용자에게 동일한 응답을 신속하게 제공 할 수 있도록합니다. 그것은 전체 페이지를 캐시합니다. View()을 반환하는 작업을 캐싱 한 경우 마스터 페이지도 캐싱된다는 의미입니다. 따라서 마스터 페이지 상단의 사용자 계정 정보는 모든 사용자가 공유합니다. 마스터 페이지 인 _Layout.cshtml이 아닌 콘텐츠 페이지 만 캐시하고 싶습니다. 어떻게 제외 할 수 있습니까?서버의 OutputCache

편집 : 내가하는 데 문제 부분은 이것이다 :

@if(Request.IsAuthenticated) { 
    <text>Hello <strong>@User.Identity.Name</strong>!</text> 
    @: | 
    @Html.ActionLink("Index", "Index", "Account") 
    @: | 
    @Html.ActionLink("Logout", "Logout", "Account") 
} 
else 
{ 
    @:| 
    @Html.ActionLink("Login", "Login", "Account") 
} 

내가 컨트롤러 액션을 캐시, 돌려보기도 캐시에서이 userlogin에 부품을 운반, 그래서 잘못 경례를 제공합니다 거의 모든 사용자. 페이지가 캐시 된 경우에도이 파트를 어떻게 동적으로 생성합니까?

답변

2

VaryByCustom이 원하는 것입니다. 당신의 Global.asax에서

넣고이 :

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    return "User".Equals(custom, StringComparison.OrdinalIgnoreCase) 
     ? User.Identity.Name 
     : base.GetVaryByCustomString(context, custom); 
} 

... 다음 [OutputCache(VaryByCustom = "User")] 속성을 사용합니다.

이렇게해도 전체 페이지가 개별적으로 캐시되지만 각 사용자마다 별도의 캐시가 만들어집니다.

다른 옵션을 찾으려면 MVC 도넛 캐싱 또는 MVC 도넛 구멍 캐싱을 검색하십시오.

답글

당신이 도넛 구멍 캐싱을 원하는 것 같은데 언급합니다. this answer이 도움이되는지 확인하십시오.

+0

덕분에, 나는 동적으로 생성되는 로그인 부분이 필요하지만 메인 컨텐츠는 모든 사용자를 위해 캐시되어야합니다. – Halo