2013-05-25 6 views
6

내가 ASP.NET 웹 API 액션 내에서 CacheControl 헤더를 구현하기 위해 노력하고 (나는이 사용하는 다른 라이브러리를 할 수있는 실현 및 필터/처리기가 있지만, 우선 몇 가지 테스트를 할에서) . 이 코드는 유래에서 제공되는 다른 답변의 수와 거의 동일ASP.NET 웹 API의 CacheControl

var response = Request.CreateResponse<IEnumerable<string>>(HttpStatusCode.OK,emails); 

response.Headers.CacheControl = new CacheControlHeaderValue(); 
response.Headers.CacheControl.MaxAge = TimeSpan.FromHours(1); 
response.Headers.CacheControl.MustRevalidate = false; 
response.Headers.CacheControl.Public = true; 

return response; 

:

나는처럼 보이는 책에서 사소한 예를 다음입니다.

그러나 웹 API는 캐시 제어 헤더를 전혀 설정하지 않습니다! 어떤 아이디어 ????? 내가 피들러의 반응을 볼 때 당신은 캐시 제어 노 캐시로 설정되어 수

그것은 다음과 같습니다. 나는 모든 아무 소용에있는 maxage, mustrevalidate 공공 값을 변경 시도

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-MiniProfiler-Ids: ["b7bfde10-e8d3-455d-b40d-2f33eb285023"] 
X-Powered-By: ASP.NET 
Date: Sat, 25 May 2013 11:54:35 GMT 
Content-Length: 24 

...

+1

응답 코드를 확인하면됩니다. 그 문제는 다른 곳에서 ... 솔루션 (일부 AOP 필터, 속성?)에있는 것 같습니다. * –

+1

Radim에 동의합니다. 코드가 정상입니다. MessageHandler가 설치되어 있습니까? –

+1

이것이 작동하지 않는 이유를 찾았습니까? webapi를 레거시 MVC 프로젝트에 통합하려고 할 때 같은 문제가 발생합니다. – Chad

답변

-4

당신이 this Stack Overflow answer thread에 설명되어 찾고있는 대답.

진짜 문제는 ASP.Net 웹 API는 건축 재해는 끔찍한 디자인과 더욱 무서운 설명서와 함께, 것입니다. 그러나 내가 말할 수있는 한, Microsoft의 어리석은 "파일 확장자에 이르기까지 모든 것을 맵핑하는"것을 무시한 유일한 라이브러리입니다 (WFC 이외에 다른 나쁜 디자인/아키텍처입니다). 요구 사항을 충족하고 REST API 엔드 포인트를 제공합니다.

당신은 그냥 일반 응답 헤더 엉망 할 수없는 것처럼, 깨진 물건을 알아 내려고 많은 시간을 낭비거야,하지만 백 개 서비스의 부부보다 더 나은입니다.

그리고 거기에 누군가가 나에게 팔과 두 다리를 비용없이 진정한 REST 엔드 포인트와 행동을 제공 할 수있는 현명하게 설계 라이브러리를 알고 있다면, 나는 확실히 그것에 대해 듣고 싶습니다.

+1

[ServiceStack] (https://servicestack.net/)을 확인 했습니까? –

2

당신이 System.Web.HttpResponse 객체 (: HttpContext.Current.Response 예)를 통해 응답을 조작하는 무언가가 있는지 확인하기 위해 귀하의 요청으로 파이프 라인을 확인합니다. 나는 System.Web.HttpResponse을 통해 http 쿠키를 추가하면 웹 API의 System.Net.Http.HttpResponseMessage 내에 정의 된 캐시 제어 헤더가 지워지는 경우가 발생했습니다.

시도 System.Web.HttpResponse을 피하는. 그럴 수 없다면 one workaround as discussed hereAddHeader()을 통해 쿠키 헤더를 수동으로 설정하고 Cookies 콜렉션을 피할 수 있습니다.

관련 문제