在MVC 5中,可以提供状态描述,例如:
return new HttpStatusCodeResult(500, "Could not connect to database");
这是使用System.Web.Mvc.HttpStatusCodeResult
。
在带有Microsoft.AspNet.Mvc.HttpStatusCodeResult
的MVC 6中,唯一的参数是statusCode
。
Shaun Wildermuth在此post中提到了问题 - 请参阅错误处理。
如何在MVC 6中显示自定义消息?
答案 0 :(得分:1)
我找到的解决方案涉及构建一个额外的类,但很好地处理缺少StatusCodeDescription。
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);
}
归功于此博客:http://programminghave.blogspot.com/2015/04/custom-action-results-in-aspnet-5-vnext.html
我修改了博客中的StringWriterResult类,将自定义Http状态包含为int。
注意,您应该在构造函数中使用HttpStatusCode代替int来遵守HTTP 1.1标准。我只是使用int来展示一个更简单的例子。
希望这有帮助!