이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14395|회답: 1

[WebAPI] ASP.Net 웹 API에서의 출력 캐싱 ASP.NET

[링크 복사]
게시됨 2019. 1. 17. 오후 4:40:51 | | |
1. Nuget이 해당 DLL을 설치합니다

Web API 2 : Install-Package Strathweb.CacheOutput.WebApi2
웹 API 1 : 설치-패키지 Strathweb.CacheOutput

2. 새로운 ActionFilterAttribute를 만들고 관련 메서드를 덮어쓰세요

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        캐시 시간/초
        사설 정보 _timespan;
        클라이언트 캐시 시간/초
        사설 _clientTimeSpan;
        익명 사용자가 캐시하는지 여부
        불 사병 _anonymousOnly;
        인덱스 키를 캐시하세요
        사적 _cachekey;
        캐시 창고
        개인 정적 읽기 전용 ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = 시간 간격;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = 익명성;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             만약 (_timespan > 0 & _clientTimeSpan > 0)
             {
                만약 (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         return false;
               만약 (ac. Request.Method == HttpMethod.Get) true를 반환합니다;
            }
           그렇지 않으면
           {
                새로운 InvalidOperationException("Wrong Arguments")를 throw합니다;
           }
            return false;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = new CacheControlHeaderValue();
            캐시컨트롤. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            캐시컨트롤. MustRevalidate = 참;
            캐시컨트롤을 반환;
        }


//Action调用前执行的方法
        public override void OnActionExecuting(HttpActionContext ac)
        {
            만약 (ac != null)
            {
                만약 (_isCacheable(ac))
                {
                    _cachekey = 끈. Join(":", 새 문자열[] { ac. 요청.요청 유리.절대경로, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        만약 (val != null)
                        {
                            에어컨. 응답 = ac. Request.CreateResponse();
                            에어컨. Response.Content = 새로운 StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            만약 (contenttype == null)
                                contenttype = new MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            에어컨. Response.Content.Headers.ContentType = contentType;
                            에어컨. Response.Headers.CacheControl = setClientCache();
                            복귀;
                        }
                    }
                }
            }
            그렇지 않으면
            {
                새로운 ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            만약 (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). 결과;
                WebApiCache.Add(_cachekey, 본문, DateTime.Now.AddSeconds(_timespan));
                WebApiCache.Add(_cachekey + ":response-ct", actionExecutedContext.Response.Content.Headers.ContentType, DateTime.Now.AddSeconds(_timespan));
            }
            if (_isCacheable(actionExecutedContext.ActionContext))
                actionExecutedContext.ActionContext.Response.Headers.CacheControl = setClientCache();
        }

    }

3. 컨트롤러가 필터를 추가하기 위해 Get 메서드에 캐시를 추가해야 합니다

     [WebApiOutputCache(120,60,false)]
        공개 문자열 GetShoppingCart()
        {
            "Hello World"를 다시 받아;
        }
시작하고, 브레이크포인트를 관찰하고, 그 효과를 관찰하세요. 전체 과정은 다음과 같습니다: 시작 시 캐시 필터를 초기화한 후 필터를 추가한 Get 메서드를 호출하고, OnActionExecuting 메서드를 입력하여 관련 캐시가 있는지 확인하고, 있다면 결과를 직접 반환하고, 없다면 컨트롤러의 Action을 호출한 뒤, OnActionExecuted 메서드를 호출하여 해당 캐시 키값 쌍을 추가하고 캐시 만료 시간을 설정하여 결과를 반환합니다.




이전의:윈도우 10 중복 애플리케이션 도구 삭제
다음:"CSS 월드" 장신쉬 azw3+mobi+epub
게시됨 2019. 1. 19. 오전 9:09:45 |
좋아
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com