You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Attribute Routing问题:AccountController路由失效Postman报404

解决AccountController路由返回404的问题

我仔细看了你的代码和问题描述,发现几个关键问题导致路由匹配失败,咱们一步步来修复:

1. 修正中间件执行顺序

中间件是按注册顺序执行的,你把app.UseHttpsRedirection()放在了app.UseMvc()之后,这会导致请求还没经过路由匹配就被后续逻辑干扰,直接返回异常。调整顺序后的Configure方法如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseHttpsRedirection(); // 移到MVC路由之前
    app.UseMvc(routes => {
        routes
            .MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}")
            .MapRoute(
                name: "api",
                template: "api/{controller}/{action}/{id?}"
            );
        routes.MapSpaFallbackRoute(
            name: "spa-fallack",
            defaults: new { controller = "Home", action = "Index" });
    });
}

2. 简化Controller的属性路由规则

你的AccountController已经使用了属性路由,部分注解属于冗余配置,反而可能引发路由歧义:

  • 类上的[Route("api/[controller]")]已经指定了基础路径,Action上的[Route("Register")]会拼接成完整路由api/Account/Register,这部分是正确的
  • [ActionName("Register")]完全多余(方法名本身就是Register),可以直接删除

修改后的Controller代码:

namespace GiveNTake.Controllers {
    [Produces("application/json")]
    [Route("api/[controller]")]
    public class AccountController : Controller {
        [AllowAnonymous]
        [HttpPost]
        [Route("Register")]
        public async Task<IActionResult> Register([FromBody] RegisterUserDTO registration) {
            // 你的业务逻辑代码
        }
    }
}

3. Postman请求的关键验证点

确保你的Postman请求符合以下要求:

  • 请求方法为POST
  • 请求路径为https://<你的项目域名/端口>/api/Account/Register
  • 请求头添加Content-Type: application/json
  • 请求体是符合RegisterUserDTO结构的合法JSON数据

额外提示

因为你在Controller上用了属性路由,Startup里的api约定路由不会影响这个Controller的匹配逻辑,留着也不影响其他未使用属性路由的控制器,不用特意删除。

按照上面的步骤调整后,应该就能正常匹配到AccountController的Register接口了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:33:16