无法向.NET Core MVC发起HTTP POST请求返回405错误该如何排查
问题产生原因
本次405错误的核心原因是请求URL与ASP.NET Core的路由规则不匹配。
默认配置下,ASP.NET Core MVC的API接口如果使用属性路由(即控制器上标注[Route("[controller]")]这类特性),仅标注了[HttpPost]、没有额外加[Route]特性的Action方法,路由路径不会包含Action名。你原来请求的https://localhost:44334/reviews/Post路径把方法名Post也加到了URL里,和实际路由规则不匹配,该路径下仅支持GET、PUT、DELETE等方法,所以返回405方法不允许,响应头返回的Allow : DELETE, GET, PUT也验证了这一点。
你配置的CORS规则本身是正常生效的,所以没有触发跨域错误,仅返回405状态码。
此类问题通用排查步骤
- 核对路由配置
先确认全局路由规则(Program.cs或Startup.cs中配置),再检查控制器、Action上的[Route]、请求方法特性([HttpPost]/[HttpGet]等)的配置。以你的场景为例,Reviews控制器标注[Route("[controller]")],其下无额外路由配置的[HttpPost]Action,正确访问路径就是/reviews/,不需要追加Post作为路径段。 - 参考Swagger的调用示例
Swagger生成的接口调用URL是完全匹配路由规则的正确地址,遇到接口调用异常时可以直接复制Swagger中的请求URL、请求参数格式进行对比,就能快速定位URL、参数格式类错误。 - 排查路由冲突
确认是否有多个Action匹配到了当前请求的路径,导致路由优先级异常,POST方法的路由被其他Action占用。 - 检查中间件顺序
确认UseCors方法的调用位置在UseRouting之后、UseAuthorization之前,中间件顺序错误也可能引发异常的405或跨域问题。
内容的提问来源于stack exchange,提问作者Mr_Happy
相关产品推荐
相关产品推荐

