저는 Sitefinity를 통해 .NET 출력 캐싱을 사용하는 복잡한 웹 사이트를 운영하고 있습니다. 최근에 사용자 위치에 따라 특정 사용자 정의 컨트롤에 다른 캐시 된 버전이 있어야했습니다. 그래서 사용자 컨트롤에 VaryByCustom이 설정된 OutputCache 지시문을 설정하고 Global.asax에서 GetVaryByCustomString 메서드를 오버라이드하여 사용자 위치를 가져 왔습니다. 문제는 간단한 테스트 케이스에서도 작동하지 않는다는 것입니다. 우리는 Sitefinity 컨텍스트 외부에서이 사용 사례를 테스트하여 .aspx 페이지가 포함 된 새 프로젝트를 만들고 그 안에 새 .ascx 사용자 정의 컨트롤을 배치하여 문제의 원인인지 확인했습니다. 페이지에는 컨트롤뿐만 아니라로드시 현재 시간을 가져 오는 레이블이 있습니다. 컨트롤에는 현재 시간을 렌더링하는 레이블도 있습니다.사용자 정의 컨트롤의 OutputCache가 작동하지 않습니다.
<%@ OutputCache Duration="60" VaryByParam="none" %>
이 설정 제어 : :이 설정 페이지 OutputCache를 제공하는 경우
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>
예상되는 기능은 발생하지 않습니다. 두 개의 서로 다른 브라우저에서이 페이지를 열면 두 번째 레이블에 두 번 다른 시간이 표시됩니다. 내가 여기서 뭔가를 완전히 놓치고 있니? .NET 캐싱을 처음 사용하기 때문에 전적으로 가능합니다.
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "custom")
{
// return custom logic
}
else
{
return base.GetVaryByCustomString(context, custom);
}
}
2 개의 서로 다른 브라우저를 사용하면 100 % 확신 할 수 있습니다. –
Chrome 및 IE8에서 열었고 같은 캐시 된 버전 – rpf3