2016-04-15 3 views
3

In MVC 5 war es möglich, eine Zustandsbeschreibung zu liefern, z:Wie wird eine benutzerdefinierte Nachricht in HttpStatusCodeResult in MVC 6 angezeigt?

return new HttpStatusCodeResult(500, "Could not connect to database");

Diese System.Web.Mvc.HttpStatusCodeResult verwendet, ist.

In MVC 6 mit Microsoft.AspNet.Mvc.HttpStatusCodeResult ist der einzige Parameter statusCode.

Shaun Wildermuth erwähnt das Problem in diesem post - siehe Fehlerbehandlung.

Wie kann ich eine benutzerdefinierte Nachricht in MVC 6 anzeigen?

Antwort

1

Eine Lösung, die ich gefunden habe, beinhaltet den Aufbau einer zusätzlichen Klasse, aber behandelt das Fehlen von StatusCodeDescription gut.

internal class ResponseWriter : ActionResult 
    { 
     private byte[] _stringAsByteArray; 
     private int _statusCode; 
     public ResponseWriter(string stringToWrite, int statusCodeToWrite) 
     { 
      _stringAsByteArray = Encoding.ASCII.GetBytes(stringToWrite); 
      _statusCode = statusCodeToWrite; 
     } 
     public override Task ExecuteResultAsync(ActionContext context) 
     { 
      context.HttpContext.Response.StatusCode = _statusCode; 
      return context.HttpContext.Response.Body.WriteAsync(_stringAsByteArray, 0, _stringAsByteArray.Length); 
     } 

    } 

public IActionResult OKResponse() 
{ 
return new ResponseWriter("Response description!", 200); 
} 
public IActionResult BadResponse() 
{ 
return new ResponseWriter("There was an error!", 500); 
} 

Kredit geht in diesem Blog: http://programminghave.blogspot.com/2015/04/custom-action-results-in-aspnet-5-vnext.html

ich die StringWriterResult Klasse im Blog als int gehören benutzerdefinierte Http Status geändert.

Hinweis: Sie sollten wahrscheinlich HttpStatusCode anstelle von int im Konstruktor verwenden, um die HTTP 1.1-Standards einzuhalten. Ich habe einfach int verwendet, um ein einfacheres Beispiel zu zeigen.

Hoffe, das hilft!

Verwandte Themen