Ich verwende ASP.NET WebApi, um eine RESTful-API zu erstellen. Ich erstelle eine PUT-Methode in einem meiner Controller, und der Code sieht folgendermaßen aus:
public HttpResponseMessage Put(int idAssessment, int idCaseStudy, string value) {
var response = Request.CreateResponse();
if (!response.Headers.Contains("Content-Type")) {
response.Headers.Add("Content-Type", "text/plain");
}
response.StatusCode = HttpStatusCode.OK;
return response;
}
Wenn ich mit dem Browser über AJAX an diesen Ort schiebe, gibt es diese Ausnahme:
Missbrauchter Headername. Stellen Sie sicher, dass Anforderungsheader mit HttpRequestMessage, Antwortheader mit HttpResponseMessage und Inhaltsheader mit HttpContent-Objekten verwendet werden.
Aber ist ein nicht Content-Type
ganz gültiger Header für eine Antwort nicht? Warum bekomme ich diese Ausnahme?
.Content
null ist)? Ich möchte den Content-Type-Header setzen, obwohl kein Inhalt vorhanden ist. Andernfalls beschwert sich Firefox mit dem Fehler "Kein Element gefunden".response.StatusCode = HttpStatusCode.NoContent
anstatt das Headerfeld Inhaltstyp hinzuzufügen.response.Content = new StringContent("");
funktioniert. Ich frage mich immer noch, warum esresponse.Headers
überhaupt existiert.Content
Beziehung stehen.In der ASP-Web-API fehlt etwas: der
EmptyContent
Typ. Es ermöglicht das Senden eines leeren Körpers, während weiterhin alle inhaltsspezifischen Header zulässig sind.Fügen Sie die folgende Klasse irgendwo in Ihren Code ein:
public class EmptyContent : HttpContent { protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) { return Task.CompletedTask; } protected override bool TryComputeLength(out long length) { length = 0L; return true; } }
Dann benutze es wie du willst. Sie haben jetzt ein Inhaltsobjekt für Ihre zusätzlichen Header.
response.Content = new EmptyContent(); response.Content.Headers.LastModified = file.DateUpdatedUtc;
Warum
EmptyContent
statt verwendennew StringContent(string.Empty)
?StringContent
ist eine schwere Klasse, die viele Codes ausführt (weil sie erbtByteArrayContent
)StringContent
fügt einen zusätzlichen nutzlosen / problematischen Header hinzu:Content-Type: plain/text; charset=...
quelle