Sto lavorando su un progetto utilizzando ASP.NET 5 e sto scrivendo una web api.Asp.net 5 web status codice di ritorno api e corpo
Ho ereditato alcune stored procedure di codice e database che utilizzano raiserror per indicare che qualcosa non va (nome utente/password errata, licenza scaduta, ecc.).
La procedura memorizzata non restituisce nulla per identificare univocamente tale errore, ad eccezione del testo del messaggio.
Desidero essere in grado di restituire una risposta HTTP NON AUTORIZZATA, ma anche di inoltrare il messaggio di errore anche al client.
Il metodo integrato IActionResult HttpUnauthorized()
non consente di fornire un motivo.
Così ho scritto il mio ActionResult che assomiglia a questo:
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);
}
}
Il problema è che il cliente riceve un 200-OK come tutto va bene.
ho fatto un passo attraverso questo e dopo che la delegazione di HttpUnauthorizedResult
è stato fatto, il codice di stato è infatti impostato su 403.
Sembra API Web è (a un certo punto), visto che non c'è contenuti nel corpo della risposta e decide che tutto è OK e reimposta il codice di stato.
C'è un modo per aggirare questo senza dover ricorrere a inviare il messaggio come un'intestazione o qualcosa del genere? (O è che il modo corretto di fare questo?)
Non è possibile impostare un codice di stato dopo che si scrive qualsiasi parte del corpo della risposta. Hai provato a chiamare HttpUnauthorizedResult.ExecuteResultAsync prima di scrivere il tuo messaggio? – yaakov
guarda questo link potrebbe risolvere il tuo problema http://weblogs.asp.net/gunnarpeipman/asp-net-mvc-3-creating-httpstatuscoderesult-with-view-based-body – Gomes
@Gomes che sembra molto promettente! Suppongo che concettualmente abbia senso, dovrò dare un'occhiata presto! – Clint