开发需要通过App Service本身保持一致并涵盖Azure API管理服务的API平台-我发现自己陷入了两者之间的不一致之处。
使用404找不到响应(due to a known issue)将带有不正确的HTTP动词(例如PUT而不是POST)的请求发送到API管理服务结果。
直接将相同请求发送到基于ASP Core 2.2的应用程序将导致405不允许响应。
ASP Core(可能是中间件)中是否有可能捕获405个响应代码结果并将其更改为404?
答案 0 :(得分:2)
不确定我是否只喜欢盲目转换状态代码。当然,取决于您的实际情况。
将这种中间件注入您的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);
});
}
注意:将其添加到链的早期。
答案 1 :(得分:1)
您可以使用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)之前。