[JQUERY] 속성을 사용하여 특정 작업에 대한 ASP.NET MVC에서 캐싱 방지
JQUERY속성을 사용하여 특정 작업에 대한 ASP.NET MVC에서 캐싱 방지
해결법
-
1.JQuery와 결과를 캐싱되지 않도록하려면 아약스 방법에 다음을 넣어 :
JQuery와 결과를 캐싱되지 않도록하려면 아약스 방법에 다음을 넣어 :
$.ajax({ cache: false //rest of your ajax setup });
또는 MVC에서 캐싱을 방지하기 위해, 우리는 우리 자신의 속성을 생성, 당신은 동일한 기능을 수행 할 수 있습니다. 여기에 우리의 코드는 다음과 같습니다
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class NoCacheAttribute : ActionFilterAttribute { 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); } }
그런 다음 [NOCACHE]와 컨트롤러를 장식합니다. 또는 당신은 단지 (있는 경우) 우리가 여기처럼 당신이에서 컨트롤러를 상속 기본 클래스의 클래스에 속성을 넣을 수있는 모든 위해 그것을 할 수 있습니다 :
[NoCache] public class ControllerBase : Controller, IControllerBase
가 아닌 캐시를 할을해야하는 경우 대신 전체 컨트롤러 장식의이 속성과 행동의 일부를 장식하실 수 있습니다.
이 브라우저에서 렌더링 할 때 클래스 또는 조치가 NOCACHE을하지 않았고 당신이 일하고 확인하려면 브라우저에서 당신은 "새로 고침"을 할 필요가 변경합니다 (Ctrl + F5)를 컴파일 한 후 그 기억. 이렇게까지 브라우저는 이전 캐시 된 버전을 유지하며, "정상적인 새로 고침 '(F5)를 새로 고침하지 않습니다.
-
2.당신은 캐싱을 방지하기 위해 캐시 속성에 내장 할 수 있습니다.
당신은 캐싱을 방지하기 위해 캐시 속성에 내장 할 수 있습니다.
.NET 프레임 워크 : [OutputCache를 (NoStore = 사실, 시간 = 0)]
.NET 코어 : ResponseCache에는 (NoStore = TRUE, 시간 = 0)]
이 비활성화 캐싱 브라우저를 강제로 불가능하다는 것을 알고 있어야합니다. 가장 좋은 당신은 대부분의 브라우저는 보통 헤더 또는 메타 태그의 형태로 이행합니다 제안을 제공 할 수 있습니다. 캐시 제어 :이 장식 속성은 비활성화 서버 캐싱 및이 헤더를 추가하지 않습니다 공공, 어떤 매장, 최대 - 나이 = 0. 이 메타 태그를 추가하지 않습니다. 원하는 경우, 사람들은보기에 수동으로 추가 할 수 있습니다.
또한, JQuery와 및 다른 클라이언트 프레임 워크는 타임 스탬프 또는 GUID와 같이 URL에 물건을 추가하여 자원의 그것의 캐시 된 버전을 사용하지 않는로 브라우저 트릭을 시도합니다. 이 브라우저가 다시 자원을 요청하지만 정말 캐싱을 방지하지 않습니다 만드는 효과가있다.
마지막 주에. 당신은 자원이 또한 서버와 클라이언트 사이에서 캐시 될 수 있음을 알고 있어야합니다. ISP의, 프록시 및 기타 또한 네트워크 장치 캐시 자원과 그들은 종종 실제 자원을 보지 않고 내부 규칙을 사용합니다. 많은 당신은이에 대해 할 수 없습니다. 좋은 소식은 몇 초 또는 몇 분처럼 짧은 시간 프레임에 대한 그들이 일반적으로 캐시 것입니다.
-
3.당신이 필요로하는 것입니다 :
당신이 필요로하는 것입니다 :
[OutputCache(Duration=0)] public JsonResult MyAction(
또는, 당신은 전체 컨트롤러를 위해 그것을 사용하지 않으려면 :
[OutputCache(Duration=0)] public class MyController
여기에 의견의 논쟁에도 불구하고,이 비활성화 브라우저 캐싱에 충분하다 -이 문서가 즉시 만료 브라우저를 말할 발광 응답 헤더에 ASP.Net가 발생합니다
-
4.다음 줄 헤더에 컨트롤러 액션 APPEND에서
다음 줄 헤더에 컨트롤러 액션 APPEND에서
public ActionResult Create(string PositionID) { Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0. Response.AppendHeader("Expires", "0"); // Proxies.
-
5.여기에 크리스 Moschini의 대답의 정보를 사용하여 간단 mattytommo에 의해 제안 된 NOCACHE 속성은 다음과 같습니다
여기에 크리스 Moschini의 대답의 정보를 사용하여 간단 mattytommo에 의해 제안 된 NOCACHE 속성은 다음과 같습니다
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class NoCacheAttribute : OutputCacheAttribute { public NoCacheAttribute() { this.Duration = 0; } }
-
6.MVC6 (DNX)의 경우, System.Web.OutputCacheAttribute가 없다
MVC6 (DNX)의 경우, System.Web.OutputCacheAttribute가 없다
참고 : NoStore을 설정할 때 시간 매개 변수가 고려되지 않습니다. 먼저 등록을위한 초기 기간을 설정하고 사용자 정의 속성으로이 메소드를 오버라이드 (override) 할 수 있습니다.
그러나 우리는 Microsoft.AspNet.Mvc.Filters.ResponseCacheFilter이
public void ConfigureServices(IServiceCollection services) ... services.AddMvc(config=> { config.Filters.Add( new ResponseCacheFilter( new CacheProfile() { NoStore=true })); } ... )
사용자 정의 속성으로 초기 필터를 대체 할 수 있습니다
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class NoCacheAttribute : ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext filterContext) { var filter=filterContext.Filters.Where(t => t.GetType() == typeof(ResponseCacheFilter)).FirstOrDefault(); if (filter != null) { ResponseCacheFilter f = (ResponseCacheFilter)filter; f.NoStore = true; //f.Duration = 0; } base.OnResultExecuting(filterContext); } }
여기에 사용 사례입니다
[NoCache] [HttpGet] public JsonResult Get() { return Json(new DateTime()); }
-
7.ASP.NET MVC 5 개 솔루션 :
ASP.NET MVC 5 개 솔루션 :
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { // ... filters.Add(new OutputCacheAttribute { NoStore = true, Duration = 0, VaryByParam = "*", Location = System.Web.UI.OutputCacheLocation.None }); } }
[OutputCache(NoStore = true, Duration = 0, Location=System.Web.UI.ResponseCacheLocation.None, VaryByParam = "*")]
그것이 ApiController가 있는지 아니면 것
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, Location = System.Web.UI.OutputCacheLocation.None, VaryByParam = "*")]
-
8.MVC에서 출력 캐싱
MVC에서 출력 캐싱
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")] OR [OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
-
9.Asp.Net MVC 코어 (인터넷 익스플로러 11 포함) 브라우저 캐싱을 방지하기위한 올바른 속성 값은 다음과 같습니다
Asp.Net MVC 코어 (인터넷 익스플로러 11 포함) 브라우저 캐싱을 방지하기위한 올바른 속성 값은 다음과 같습니다
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
Microsoft 문서에 설명 된대로 :
NoStore 및 Location.None - ASP.NET 코어의 응답 캐싱
from https://stackoverflow.com/questions/10011780/prevent-caching-in-asp-net-mvc-for-specific-actions-using-an-attribute by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] $ (문서) .click ()는 아이폰에서 제대로 작동하지 않습니다. JQuery와 [중복] (0) | 2020.10.11 |
---|---|
[JQUERY] jQuery를 - 여러 $ (문서) .ready ...? (0) | 2020.10.11 |
[JQUERY] 클릭 안쪽에 드롭 다운 메뉴 가까이하지 마십시오 (0) | 2020.10.10 |
[JQUERY] jQuery를 : addClass ()와 같은 사이 수 있습니까 호출 지연 ()? (0) | 2020.10.10 |
[JQUERY] CORS 반환에 IE9 jQuery를 AJAX는 "액세스가 거부되었습니다" (0) | 2020.10.10 |