繁体   English   中英

ASP.NET核心句柄方法不允许405

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM