ASP.NET MVC 자동 캐싱 옵션을 비활성화하는 방법은 무엇입니까?
ASP에서 자동 브라우저 캐싱을 비활성화하는 방법.넷 mvc 애플리케이션?
왜냐하면 모든 링크를 캐시하기 때문에 캐시에 문제가 있기 때문입니다.그러나 때때로 캐시를 저장하는 기본 인덱스 페이지로 자동 리디렉션되고, 해당 링크를 클릭할 때마다 기본 인덱스 페이지로 리디렉션됩니다.
ASP.NET MVC 4에서 캐싱 옵션을 수동으로 비활성화하는 방법을 아는 사람이 있습니까?
사용할 수 있습니다.OutputCacheAttribute
컨트롤러의 특정 수행 또는 모든 수행에 대한 서버 및/또는 브라우저 캐싱을 제어합니다.
컨트롤러의 모든 작업에 대해 사용 안 함
[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will be applied to all actions in MyController, unless those actions override with their own decoration
public class MyController : Controller
{
// ...
}
특정 작업에 대해 사용 안 함:
public class MyController : Controller
{
[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will disable caching for Index only
public ActionResult Index()
{
return View();
}
}
모든 컨트롤러의 모든 작업에 기본 캐싱 전략을 적용하려면 다음을 편집하여 글로벌 작업 필터를 추가할 수 있습니다.global.asax.cs
그리고 그것을 찾고 있습니다.RegisterGlobalFilters
방법.이 메서드는 기본 MVC 응용 프로그램 프로젝트 템플릿에 추가됩니다.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new OutputCacheAttribute
{
VaryByParam = "*",
Duration = 0,
NoStore = true,
});
// the rest of your global filters here
}
이로 인해 다음이 적용됩니다.OutputCacheAttribute
서버 및 브라우저 캐싱을 사용하지 않도록 설정하는 모든 작업에 대해 위에서 지정합니다.다음을 추가하여 이 캐시 없음을 재정의할 수 있습니다.OutputCacheAttribute
특정 작업 및 컨트롤러로 이동합니다.
HackedByChinese는 요점을 놓치고 있습니다.그는 서버 캐시를 클라이언트 캐시와 착각했습니다.OutputCacheAttribute는 브라우저(클라이언트) 캐시가 아닌 서버 캐시(IIS http.sys 캐시)를 제어합니다.
제 코드베이스의 아주 작은 부분을 제공합니다.현명하게 사용하세요.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public sealed class NoCacheAttribute : FilterAttribute, IResultFilter
{
public void OnResultExecuting(ResultExecutingContext filterContext)
{
}
public void OnResultExecuted(ResultExecutedContext filterContext)
{
var cache = filterContext.HttpContext.Response.Cache;
cache.SetCacheability(HttpCacheability.NoCache);
cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches);
cache.SetExpires(DateTime.Now.AddYears(-5));
cache.AppendCacheExtension("private");
cache.AppendCacheExtension("no-cache=Set-Cookie");
cache.SetProxyMaxAge(TimeSpan.Zero);
}
}
용도:
/// will be applied to all actions in MyController
[NoCache]
public class MyController : Controller
{
// ...
}
모든 클라이언트 캐시를 사용할 수 없도록 설정하므로 현명하게 사용하십시오.비활성화되지 않은 유일한 캐시는 "뒤로 단추" 브라우저 캐시입니다.하지만 정말 피할 방법이 없는 것 같습니다.자바스크립트를 사용하여 탐지하고 페이지 또는 페이지 영역을 강제로 새로 고친 경우에만 가능합니다.
중복 코드를 방지하기 위해 페이지에서 캐시 값을 개별적으로 설정하는 대신 Web.config 파일에서 캐시 프로파일을 설정할 수 있습니다.OutputCache 특성의 CacheProfile 속성을 사용하여 프로파일을 참조할 수 있습니다.이 캐시 프로파일은 페이지/메소드가 이러한 설정을 재정의하지 않는 한 모든 페이지에 적용됩니다.
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheProfile" duration="60" varyByParam="*" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
또한 특정 작업 또는 컨트롤러에서 캐싱을 사용하지 않도록 설정하려는 경우 아래와 같이 특정 작업 방법을 지정하여 구성 캐시 설정을 재정의할 수 있습니다.
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult NoCachingRequired()
{
return PartialView("abcd");
}
이것이 명확하고 당신에게 유용하기를 바랍니다.
브라우저 캐싱을 방지하려면 ShareFunction의 이 코드를 사용할 수 있습니다.
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
on 페이지 솔루션의 경우 레이아웃 페이지에서 설정:
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
제 답변을 모두에게 보여주기 위해, 저는 이 질문에 대한 답변으로 제 의견을 클릭합니다.
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
이것은 모든 브라우저(IE, Firefox 및 Chrome)에서 작동합니다.제 대답이 당신에게 효과가 있었다는 것을 들으니 기쁩니다. @Joseph Katzman
언급URL : https://stackoverflow.com/questions/12948156/asp-net-mvc-how-to-disable-automatic-caching-option
'programing' 카테고리의 다른 글
data.frame 열을 벡터로 변환하시겠습니까? (0) | 2023.07.10 |
---|---|
어디서든 패키지 이름을 가져오는 방법은 무엇입니까? (0) | 2023.07.10 |
사용자와 상관없이 Excel Workbook을 바탕 화면에 저장하는 방법은 무엇입니까? (0) | 2023.07.05 |
.dmp 파일을 Oracle로 가져오려면 어떻게 해야 합니까? (0) | 2023.07.05 |
Microsoft를 사용하여 Excel 2010의 데이터 읽기사무실. 인터럽트.엑셀 (0) | 2023.07.05 |