You need to enable JavaScript to run this app. .NET Core 3.1 Web API发送GET请求返回405提示仅允许DELETE方法如何解决
优惠活动
大模型
产品
解决方案
定价
更多

.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。

解决方案

  1. 修改ConfirmAccountEmail方法的访问修饰符为public,确保路由系统可以识别该端点:
[HttpGet]
[AllowAnonymous]
[Route("ConfirmAccountEmail")]
// 把protected改成public
public override async Task<IActionResult> ConfirmAccountEmail(string token, string email)
{
    // 邮箱验证逻辑代码...
}
  1. 简化Delete方法的路由配置,避免路由冲突,统一在HttpMethod属性中定义完整路由模板,删除冗余的[Route]属性:
[HttpDelete("DeleteUserAccount/{id}")]
[Authorize(Roles = AdminToken)]
public override async Task<IActionResult> DeleteUserAccount([FromRoute] int id)
{
    // 用户删除逻辑代码...
}
  1. 可选校验:项目启动后查看端点注册日志,确认以下两个端点已正常注册:
  • GET: api/User/ConfirmAccountEmail
  • DELETE: api/User/DeleteUserAccount/{id}

内容的提问来源于stack exchange,提问作者slasky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 05:15:03