如何在MVC 6中的HttpStatusCodeResult中显示自定义消息?

时间:2016-04-15 09:19:40

标签: asp.net-mvc asp.net-core-mvc

在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中显示自定义消息?

1 个答案:

答案 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来展示一个更简单的例子。

希望这有帮助!