gpt4 book ai didi

c# - POST 方法总是返回 405 响应

转载 作者:行者123 更新时间:2023-12-02 16:46:36 26 4
gpt4 key购买 nike

我有一个 .NET Core 3.1 API,它有两个端点,我用它来测试我正在编写的一些错误处理中间件。我正在使用 Swagger UI 来测试这个 API。

我遇到的问题是,如果在执行 POST 请求期间抛出任何类型的异常,它将作为 405 响应返回,甚至不会触发我正在编写的错误处理中间件。我的 API 中的所有 POST 请求都会发生这种情况,而不仅仅是我正在展示的测试请求。

我决定尝试一个同样简单的 GET 方法,令我惊讶的是,当其中抛出异常时,它会触发我的错误处理中间件,然后它会将 500 响应写回调用者。这是整个 Controller 代码:

[Route("api/[controller]")]
[ApiController]

public class TestingController : ControllerBase
{
[HttpPost]
[Route("TestPost")]
public IActionResult TestPost([FromBody] string test)
{
throw new Exception();
}

[HttpGet]
[Route("TestGet/{test}")]
public IActionResult TestGet(string test)
{
throw new Exception();
}

}

那么,为什么在发生异常时 POST 方法会返回 405 响应,而 GET 方法会返回 500 响应?

编辑:这是我正在发出的示例 POST 请求

请求网址:https://localhost:44387/api/Testing/TestPost

请求正文(JSON):“测试”

这是我从 POST 收到的响应 header :

允许:获取 缓存控制:无缓存 日期:2020 年 2 月 19 日星期三 17:58:22 GMT 过期:-1 用法:无缓存 服务器:Microsoft-IIS/10.0 状态:405 x-powered-by: ASP.NET

最佳答案

所以我最终在 Rahul Sharma 的帮助下解决了这个问题.该问题与 POST 方法没有任何关系,而是与 POST 请求试图路由到的自定义错误处理 Controller 有关。错误 Controller 中的方法定义如下:

    [Route("/Error-descriptive")]
[HttpGet]
public IActionResult ErrorDescriptive()
{
if (!_env.IsNonProductionEnv())
throw new InvalidOperationException("This endpoint cannot be invoked in a production environment.");

IExceptionHandlerFeature exFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
Exception ex = exFeature.Error;

return Problem(detail: ex.StackTrace, title: ex.Message);
}

问题是此方法中使用的 [HttpGet] 属性,这会阻止我的 POST 请求在发生异常时被路由到此 Controller ,从而产生 405 响应。删除属性允许错误处理程序代码运行,并产生 500 响应。

对于最初没有添加这段代码,我深表歉意,但我非常有信心这段代码不是问题的原因,因为错误 Controller 中的代码根本没有被执行。

关于c# - POST 方法总是返回 405 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60305986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com