2013-05-25 34 views
6

Próbuję zaimplementować nagłówki CacheControl z poziomu działania ASP.NET Web Api (zdaję sobie sprawę, że mogę to zrobić za pomocą innych bibliotek oraz w filtrach/procedurach, ale najpierw chcę wykonać pewne testy) .ASP.NET Web API CacheControl

śledzę trywialny przykład z książki, która wygląda następująco:

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; 

Kod ten jest niemal identyczny z szeregiem innych udzielonych odpowiedzi na stackoverflow.

Jednak interfejs sieciowy w ogóle nie ustawia nagłówka kontrolki pamięci podręcznej! Jakieś pomysły?????

Kiedy patrzę na odpowiedź w skrzypku, wygląda to następująco, ponieważ kontrola pamięci podręcznej jest ustawiona na brak pamięci podręcznej.

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 

Próbowałem zmieniając maxage, mustrevalidate i wartości społeczne wszystko bezskutecznie ...

+1

Po prostu sprawdzam twój kod odpowiedzi ... działa dla mnie. Wydaje się, że problem jest gdzie indziej ... w twoim rozwiązaniu * (jakiś filtr AOP ?, atrybut?) * –

+1

Zgadzam się z Radim, twój kod jest w porządku. Czy masz zainstalowane jakieś MessageHandlers? –

+1

Czy kiedykolwiek znalazłeś przyczynę tego nie działa? Pracuję nad tym samym problemem, próbując zintegrować webapi ze starszym projektem MVC. – Chad

Odpowiedz

-4

Odpowiedź szukasz omówiono this Stack Overflow answer thread.

Prawdziwym problemem jest to, że ASP.Net Web API to katastrofa architektoniczna, o strasznym projekcie i jeszcze straszliwszej dokumentacji. Ale na tyle, na ile mogę powiedzieć, że jest to jedyna biblioteka (poza WFC, która jest kolejną nieprzyjemnie złą konstrukcją/architekturą), która ignoruje głupi Microsoft "mapuje wszystko na rozszerzenie pliku!" Wymagania i dostarcza prawdziwe punktów końcowych API REST.

Poświęcisz dużo czasu, próbując rozgryźć rzeczy, które są po prostu zepsute, tak jak nie mogą zadzierać z nagłówkami odpowiedzi, ale jest to lepsze niż kilkaset usług.

A jeśli ktoś tam wie o rozsądnie zaprojektowanej bibliotece, która może dostarczyć prawdziwych punktów końcowych i zachowań REST bez kosztowania mnie ręki i dwóch nóg, z pewnością chciałbym o tym usłyszeć.

+1

Czy sprawdziłeś [ServiceStack] (https://servicestack.net/)? –

2

Sprawdź potok żądań, aby sprawdzić, czy masz coś, co manipuluje twoją odpowiedzią za pośrednictwem obiektu System.Web.HttpResponse (np. HttpContext.Current.Response). Napotkałem przypadki, w których dodanie plików cookie http za pośrednictwem System.Web.HttpResponse spowoduje wymazanie wszystkich nagłówków kontrolek pamięci podręcznej zdefiniowanych w interfejsie WWW System.Net.Http.HttpResponseMessage.

Spróbuj uniknąć System.Web.HttpResponse. Jeśli nie jest to możliwe, one workaround as discussed here będzie ręcznie ustawić nagłówek pliku cookie poprzez AddHeader() i całkowicie uniknąć kolekcji .