如何解决设置响应状态码对Web api核心无效
AspNetCore 3.1.3
我正在尝试编写自定义错误结果,以便在必要时始终如一地将其返回给用户。
我首先从StatusCodeResult
继承并覆盖ExecuteResult
方法,如下所示:
public override void ExecuteResult(ActionContext context)
{
base.ExecuteResult(context);
var bytes = Encoding.UTF8.GetBytes(ErrorMessage);
context.HttpContext.Response.Body.Write(bytes,bytes.Length);
}
然后我意识到我所写的响应主体被完全忽略了,而响应是
status: 422
title: "Unprocessable Entity"
traceId: "|5c53f94f-4826199e14151b80."
type: "https://tools.ietf.org/html/rfc4918#section-11.2"
尝试了所有可以想到的方法来更改主体,但是框架只是自动覆盖了该内容,因此我找不到有关位置或方式的信息。
然后我继续扩展IClientErrorActionResult
,以实现如下所示的界面:
public async Task ExecuteResultAsync(ActionContext context)
{
var bytes = Encoding.UTF8.GetBytes(ErrorMessage);
context.HttpContext.Response.StatusCode = 422;
await context.HttpContext.Response.Body.WriteAsync(bytes,bytes.Length);
await context.HttpContext.Response.CompleteAsync();
}
这次,响应的主体与我编写的内容匹配,但是StatusCode
始终自动更改为200,即使我在编写响应之前将其设置为422。
我的问题是:如何更改从StatusCodeResult
返回的主体,或使框架尊重我在StatusCode
的'ExecuteResultAsync'方法中设置的IActionResult
。
此外,如果有人能指出我在此处发生的情况,这些覆盖发生的位置以及原因的任何文档,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。