2013-05-25 9 views
6

Ich versuche, CacheControl-Header aus einer ASP.NET Web API-Aktion zu implementieren (ich weiß, ich kann dies mit anderen Bibliotheken und in Filtern/Handlern tun, aber zuerst einige Tests durchführen) .ASP.NET-Web-API CacheControl

Ich verfolge ein triviales Beispiel aus einem Buch, das wie folgt aussieht:

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; 

Dieser Code fast identisch mit einer Reihe von anderen Antworten auf Stackoverflow vorgesehen ist.

Die Web-API setzt jedoch den Cache-Steuerkopf überhaupt nicht! Irgendwelche Ideen?????

Wenn ich mir die Antwort in fiddler anschaue sieht es wie folgt aus, da die Cache-Kontrolle auf No-Cache gesetzt ist.

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 

Ich habe versucht, die maxage, mustrevalidate und öffentliche Werte alles ohne Erfolg zu ändern ...

+1

Ich überprüfe einfach Ihren Antwortcode ... arbeitet für mich. Es scheint, dass das Problem an anderer Stelle ... in Ihrer Lösung * (einige AOP-Filter ?, Attribut?) * –

+1

Ich stimme Radim, ist Ihr Code in Ordnung. Hast du irgendwelche MessageHandler installiert? –

+1

Haben Sie jemals den Grund dafür gefunden nicht funktioniert? Ich stoße auf dasselbe Problem, indem ich versuche, webapi in ein altes MVC-Projekt zu integrieren. – Chad

Antwort

-4

Die Antwort Sie suchen in this Stack Overflow answer thread diskutiert wird.

Das eigentliche Problem ist, dass die ASP.Net Web API eine architektonische Katastrophe ist, mit einem schrecklichen Design und noch schrecklichere Dokumentation. Aber soweit ich das beurteilen kann, ist es die einzige Bibliothek da draußen (abgesehen von der WFC, die ein anderes abgrundtief schlechtes Design/Architektur ist), die Microsofts dumme "Karte alles auf eine Dateiendung!" Ignoriert. Anforderungen und liefert real REST-API-Endpunkte.

Sie werden viel Zeit verschwenden, wenn Sie versuchen, Dinge herauszufinden, die einfach kaputt sind, weil Sie nicht in der Lage sind, mit Antwort-Headern zu stören, aber es ist besser als ein paar hundert Dienste.

Und wenn jemand da draußen eine vernünftig entworfene Bibliothek kennt, die wahre REST-Endpunkte und Verhaltensweisen liefern kann, ohne mir einen Arm und zwei Beine zu kosten, würde ich sicher gerne etwas darüber erfahren.

+1

Haben Sie [ServiceStack] (https://servicestack.net/) ausgecheckt? –

2

Überprüfen Sie Ihre Anfrage-Pipeline, um zu sehen, ob Sie etwas haben, das Ihre Antwort über das Objekt System.Web.HttpResponse manipuliert (zB: HttpContext.Current.Response). Ich bin auf Fälle gestoßen, in denen das Hinzufügen von http-Cookies über System.Web.HttpResponse alle Cache-Steuer-Header löscht, die in der Web-API System.Net.Http.HttpResponseMessage definiert sind.

Versuchen Sie zu vermeiden System.Web.HttpResponse. Wenn das nicht möglich ist, one workaround as discussed here wäre die Cookie-Header manuell über AddHeader() und vermeiden Sie die Cookies Sammlung insgesamt.