作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序使用自定义 NotFoundException,我使用 ASP.NET 核心异常处理程序中间件拦截异常并返回 404 响应。
这是中间件的简化版本。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
app.UseExceptionHandler(appBuilder => {
appBuilder.Run(async context => {
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
var responseContent = new {
StatusCode = context.Response.StatusCode,
Message = "Not found"
};
await context.Response.WriteAsJsonAsync(responseContent);
});
});
...
}
我希望此代码返回内容为 JSON 的 404 响应,但请求只是出错。如果我使用 HttpClient 运行测试,我会收到以下错误:
System.Net.Http.HttpRequestException: 'Error while copying content to a stream.'
如果我将中间件中的状态代码更改为 404 以外的任何内容,它似乎会按预期工作。
// changing this line
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
// to this line will successfully return the result
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
此 404 代码一直有效,直到我将目标框架从 netcoreapp3.1 更改为 net5.0。我需要更改什么才能在面向 net5.0 时从异常中间件成功返回带有 JSON 的 404?
最佳答案
问题似乎是从this update开始的到 ExceptionHandlerMiddleware。
添加此行修复了网站实时运行时的响应。
await context.Response.CompleteAsync();
但是这一行没有修复我使用 TestServer 的测试,因为 TestServer does not yet implement完全异步。
关于asp.net-core - 如何从 ASP.NET Core 异常中间件返回 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67164637/
我是一名优秀的程序员,十分优秀!