[英]ASP.NET Core handle Method Not Allowed 405
开发一个需要通过App Service本身保持一致并覆盖Azure API管理服务的API平台 - 我发现自己陷入了两者之间的不一致。
使用不正确的HTTP谓词(例如PUT而不是POST)向API Management服务结果发送404 Not found响应( 由于已知问题 )。
直接向基于ASP Core 2.2的应用程序发送相同的请求将导致405 Not Allowed响应。
ASP Core(可能是中间件)是否有可能捕获405响应代码结果并将其更改为404?
不确定我是否只是盲目状态代码转换的粉丝。 当然,根据您的具体情况由您决定。
在您的Configure
方法中注入的这些中间件可以解决这个问题:
public void Configure(IApplicationBuilder app)
{
app.Use(next => context =>
{
context.Response.OnStarting(() =>
{
if (context.Response.StatusCode == 405)
{
context.Response.StatusCode = 404;
}
return Task.CompletedTask;
});
return next(context);
});
}
注意:在链中尽早添加。
这是您可以使用StatusCodePages
中间件处理的内容。 这是一个例子:
app.UseStatusCodePages(ctx =>
{
if (ctx.HttpContext.Response.StatusCode == 405)
ctx.HttpContext.Response.StatusCode = 404;
return Task.CompletedTask;
});
传递给UseStatusCodePages
的参数是一个回调函数,只要中间件检测到状态代码介于400和599之间的响应(空体),就会执行该回调函数。 在上面的示例中,我们只检查405
并将其更改为404
。 对UseStatusCodePages
本身的调用必须放在任何请求处理中间件(如MVC)之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.