ASP.NET Core句柄方法不允许405

时间:2018-12-17 23:26:19

标签: c# .net azure asp.net-core asp.net-core-webapi

开发需要通过App Service本身保持一致并涵盖Azure API管理服务的API平台-我发现自己陷入了两者之间的不一致之处。

使用404找不到响应(due to a known issue)将带有不正确的HTTP动词(例如PUT而不是POST)的请求发送到API管理服务结果。

直接将相同请求发送到基于ASP Core 2.2的应用程序将导致405不允许响应。

ASP Core(可能是中间件)中是否有可能捕获405个响应代码结果并将其更改为404?

2 个答案:

答案 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)之前。