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

开发一个需要通过应用服务本身保持一致并涵盖 Azure API 管理服务的 API 平台——我发现自己陷入了两者之间的不一致问题。

使用不正确的 HTTP 动词(例如 PUT 而不是 POST)向 API 管理服务发送请求会导致 404 Not found 响应(由于已知问题)。

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

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


慕侠2389804
浏览 228回答 2
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);    });}注意:在链的早期添加它。

万千封印

这是您可以使用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。
打开App,查看更多内容
随时随地看视频慕课网APP