Ich arbeite an einem Projekt mit ASP.NET 5 und ich schreibe eine Web-API.Asp.net 5 Web API Rückgabestatus Code und Körper
Ich habe einige Code- und Datenbankspeicherprozeduren geerbt, die raiserror verwenden, um anzuzeigen, dass etwas nicht stimmt (Benutzername/Passwort falsch, abgelaufene Lizenz usw.).
Die gespeicherte Prozedur gibt nichts zurück, um diesen Fehler außer dem Nachrichtentext eindeutig zu identifizieren.
Ich möchte in der Lage sein, eine HTTP-UNAUTHORIZED-Antwort zurückzugeben, aber die Fehlermeldung auch an den Client zu senden.
Die eingebaute IActionResult HttpUnauthorized()
Methode lässt nicht zu, einen Grund zu geben.
Also schrieb ich meine eigene Action, die wie folgt aussieht:
public class UnauthorizedWithMessageResult : IActionResult
{
private readonly string _message;
public UnauthorizedWithMessageResult(string message)
{
_message = message;
}
public async Task ExecuteResultAsync(ActionContext context)
{
using (var sw = new HttpResponseStreamWriter(context.HttpContext.Response.Body, Encoding.UTF8))
{
await sw.WriteLineAsync(_message);
}
await new HttpUnauthorizedResult().ExecuteResultAsync(context);
}
}
Das Problem besteht darin, dass der Client eine 200-OK empfängt wie alles in Ordnung ist.
Ich habe durch diese und nach der Delegation HttpUnauthorizedResult
trat getan worden ist, wird der Statuscode tatsächlich auf 403.
Es ist wie Web API aussieht, ist (irgendwann) zu sehen, dass es in den Inhalt der Körper der Antwort und entscheidet, dass alles in Ordnung ist und setzt den Statuscode zurück.
Gibt es eine Möglichkeit, um dies zu umgehen, ohne auf die Nachricht als Header oder etwas zu senden? (Oder ist das der richtige Weg, dies zu tun?)
Sie keinen Statuscode festlegen können, nachdem Sie einen beliebigen Teil der Antworttext schreiben. Haben Sie versucht, HttpUnauthorizedResult.ExecuteResultAsync aufzurufen, bevor Sie Ihre Nachricht geschrieben haben? – yaakov
sieht dieser Link kann Ihr Problem lösen http://weblogs.asp.net/gunnarpeipman/asp-net-mvc-3-creating-httpstatuscoderesult-with-view-based-body – Gomes
@Gomes, die sehr vielversprechend aussieht! Ich denke, konzeptionell macht es Sinn, muss bald nachsehen! – Clint