【问题标题】:ASP.net Controller 404's for certain HTTP verbs某些 HTTP 动词的 ASP.net 控制器 404
【发布时间】:2022-01-10 06:16:19
【问题描述】:

我正在编写一个 ASP.net Web API 控制器。我有一个只支持 POST 的端点。我正在编写错误处理代码来为不受支持的 HTTP 方法返回 HTTP 405(而不是默认的 404)。

[HttpPost]
[ODataRoute("foobar")]
public async Task<IActionResult> Post() 
{
    return NoContent();
}

对于剩下的动词,我有一个错误处理方法:

[HttpGet]
[HttpPatch]
[HttpDelete]
[HttpPut]
[ODataRoute("foobar")]
public async Task<IActionResult> NotSupported()
{
    // return http 405;
}

我一直在 Postman 中调用以测试此端点的功能。使用 GET,端点按预期返回 201。但是,只有一些其他 HTTP 动词返回了它们的预期响应。这些调用都是使用完全相同的 URL 进行的,所以我很困惑为什么只有一些动词到达我的 NotSupported 方法。

  • 获取:404
  • 输入:405
  • 补丁:405
  • 删除:404

【问题讨论】:

  • 你的目标是 .net core 吗?

标签: c# asp.net-web-api


【解决方案1】:

我认为是 OData 破坏了您的路由,没有它它也能正常工作。但是您不需要创建特殊的控制器动作。试试这段代码,在 Visual Studio 中测试过

[ODataRoute("foobar")]
public async Task<IActionResult> Post() 
{
     if( HttpContext.Request.Method == HttpMethod.Post.Method) return NoContent();

     return StatusCode(405);
}
 

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多