为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET Core 处理方法不允许 405

ASP.NET Core 处理方法不允许 405

C#
慕侠2389804 2022-06-18 16:23:43
开发一个需要通过应用服务本身保持一致并涵盖 Azure API 管理服务的 API 平台——我发现自己陷入了两者之间的不一致问题。使用不正确的 HTTP 动词(例如 PUT 而不是 POST)向 API 管理服务发送请求会导致 404 Not found 响应(由于已知问题)。将相同的请求直接发送到基于 ASP Core 2.2 的应用程序将导致 405 Not Allowed 响应。ASP Core(可能是中间件)中是否有可能捕获 405 响应代码结果并将其更改为 404?
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

不确定我是否喜欢进行盲状态代码转换。当然,这取决于您的具体情况。


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);

    });

}

注意:在链的早期添加它。


查看完整回答
反对 回复 2022-06-18
?
万千封印

TA贡献1891条经验 获得超3个赞

这是您可以使用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。


查看完整回答
反对 回复 2022-06-18
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信