복붙노트

[JQUERY] 속성을 사용하여 특정 작업에 대한 ASP.NET MVC에서 캐싱 방지

JQUERY

속성을 사용하여 특정 작업에 대한 ASP.NET MVC에서 캐싱 방지

해결법


  1. 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. 2.당신은 캐싱을 방지하기 위해 캐시 속성에 내장 할 수 있습니다.

    당신은 캐싱을 방지하기 위해 캐시 속성에 내장 할 수 있습니다.

    .NET 프레임 워크 : [OutputCache를 (NoStore = 사실, 시간 = 0)]

    .NET 코어 : ResponseCache에는 (NoStore = TRUE, 시간 = 0)]

    이 비활성화 캐싱 브라우저를 강제로 불가능하다는 것을 알고 있어야합니다. 가장 좋은 당신은 대부분의 브라우저는 보통 헤더 또는 메타 태그의 형태로 이행합니다 제안을 제공 할 수 있습니다. 캐시 제어 :이 장식 속성은 비활성화 서버 캐싱 및이 헤더를 추가하지 않습니다 공공, 어떤 매장, 최대 - 나이 = 0. 이 메타 태그를 추가하지 않습니다. 원하는 경우, 사람들은보기에 수동으로 추가 할 수 있습니다.

    또한, JQuery와 및 다른 클라이언트 프레임 워크는 타임 스탬프 또는 GUID와 같이 URL에 물건을 추가하여 자원의 그것의 캐시 된 버전을 사용하지 않는로 브라우저 트릭을 시도합니다. 이 브라우저가 다시 자원을 요청하지만 정말 캐싱을 방지하지 않습니다 만드는 효과가있다.

    마지막 주에. 당신은 자원이 또한 서버와 클라이언트 사이에서 캐시 될 수 있음을 알고 있어야합니다. ISP의, 프록시 및 기타 또한 네트워크 장치 캐시 자원과 그들은 종종 실제 자원을 보지 않고 내부 규칙을 사용합니다. 많은 당신은이에 대해 할 수 없습니다. 좋은 소식은 몇 초 또는 몇 분처럼 짧은 시간 프레임에 대한 그들이 일반적으로 캐시 것입니다.


  3. 3.당신이 필요로하는 것입니다 :

    당신이 필요로하는 것입니다 :

    [OutputCache(Duration=0)]
    public JsonResult MyAction(
    

    또는, 당신은 전체 컨트롤러를 위해 그것을 사용하지 않으려면 :

    [OutputCache(Duration=0)]
    public class MyController
    

    여기에 의견의 논쟁에도 불구하고,이 비활성화 브라우저 캐싱에 충분하다 -이 문서가 즉시 만료 브라우저를 말할 발광 응답 헤더에 ASP.Net가 발생합니다


  4. 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. 5.여기에 크리스 Moschini의 대답의 정보를 사용하여 간단 mattytommo에 의해 제안 된 NOCACHE 속성은 다음과 같습니다

    여기에 크리스 Moschini의 대답의 정보를 사용하여 간단 mattytommo에 의해 제안 된 NOCACHE 속성은 다음과 같습니다

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public sealed class NoCacheAttribute : OutputCacheAttribute
    {
        public NoCacheAttribute()
        {
            this.Duration = 0;
        }
    }
    

  6. 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. 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. 8.MVC에서 출력 캐싱

    MVC에서 출력 캐싱

    [OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
    
    OR
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
    
    

  9. 9.Asp.Net MVC 코어 (인터넷 익스플로러 11 포함) 브라우저 캐싱을 방지하기위한 올바른 속성 값은 다음과 같습니다

    Asp.Net MVC 코어 (인터넷 익스플로러 11 포함) 브라우저 캐싱을 방지하기위한 올바른 속성 값은 다음과 같습니다

    [ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
    

    Microsoft 문서에 설명 된대로 :

    NoStore 및 Location.None - ASP.NET 코어의 응답 캐싱

  10. 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