在MVC5中,我使用以下代码返回带有自定义消息的状态代码。它在我的输出中显示提供的消息。
return new HttpStatusCodeResult(403, "Not allowed");
Run Code Online (Sandbox Code Playgroud)
在.net核心框架中,以上方法不适用,因此我尝试了以下方法,但没有找到如何传递自定义消息。
StatusCode(403)
Run Code Online (Sandbox Code Playgroud)
它显示默认消息为“禁止”
如何在StatusCode中提供自定义消息?还有其他方法可用吗?
小智 15
我研究了标准方法的实现(感谢 Resharper 的反编译器):
return Ok("Message");
Run Code Online (Sandbox Code Playgroud)
它基本上创建了新的 OkObjectResult,向其构造函数提供值(“消息”),并返回该对象。反过来,OkObjectResult 只是 ObjectResult 的衍生物,它有自己的字段,默认状态代码 (200),将放入其构造函数参数(消息,或您提供的任何对象)中的内容重新翻译为基本构造函数 (ObjectResult),并分配从它的私有常量字段到基类的属性 StatusCode 的值,所以它基本上是 ObjectResult 的一种包装器。
那么,从所有这些中可以得出什么结论:我们可以使用基础 ObjectResult 类以类似的方式返回带有消息的状态代码:
return new ObjectResult("Your message") {StatusCode = 403};
Run Code Online (Sandbox Code Playgroud)
我发现ContentResult给出最简单和可用的结果:
private static ActionResult Result(HttpStatusCode statusCode, string reason) => new ContentResult
{
StatusCode = (int)statusCode,
Content = $"Status Code: {(int)statusCode}; {statusCode}; {reason}",
ContentType = "text/plain",
};
Run Code Online (Sandbox Code Playgroud)
只需返回该调用即可使用它:
return Result(HttpStatusCode.Unauthorized, "Invalid token");
Run Code Online (Sandbox Code Playgroud)
这将导致文本为401 Status Code: 401; Unauthorized; Invalid token。
小智 5
如果你不在控制器中,你可以做这样的事情
return new ObjectResult(Message) { StatusCode = (int)StatusCode };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6428 次 |
| 最近记录: |