.NET Core 3.1 Web API发送GET请求返回405提示仅允许DELETE方法如何解决
问题根因
- 控制器Action访问修饰符错误:
ConfirmAccountEmail方法使用protected修饰,ASP.NET Core路由系统仅会将public修饰的实例方法识别为可对外访问的控制器端点,该方法根本没有被注册到路由表中。 - Delete方法路由配置冗余:同时在
[HttpDelete("{id}")]和[Route("DeleteUserAccount")]中定义路由模板,二者叠加后生成的路由规则存在匹配歧义,当你请求ConfirmAccountEmail路径时,路由系统未找到对应的GET端点,错误匹配到了路径模式相似的Delete端点,因此返回405错误提示仅允许DELETE方法。 - 删除Delete端点后返回404也符合以上逻辑:此时路由表中没有任何和你请求路径匹配的端点,自然返回404。
解决方案
- 修改
ConfirmAccountEmail方法的访问修饰符为public,确保路由系统可以识别该端点:
[HttpGet] [AllowAnonymous] [Route("ConfirmAccountEmail")] // 把protected改成public public override async Task<IActionResult> ConfirmAccountEmail(string token, string email) { // 邮箱验证逻辑代码... }
- 简化Delete方法的路由配置,避免路由冲突,统一在HttpMethod属性中定义完整路由模板,删除冗余的
[Route]属性:
[HttpDelete("DeleteUserAccount/{id}")] [Authorize(Roles = AdminToken)] public override async Task<IActionResult> DeleteUserAccount([FromRoute] int id) { // 用户删除逻辑代码... }
- 可选校验:项目启动后查看端点注册日志,确认以下两个端点已正常注册:
- GET:
api/User/ConfirmAccountEmail - DELETE:
api/User/DeleteUserAccount/{id}
内容的提问来源于stack exchange,提问作者slasky
相关产品推荐
相关产品推荐

