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

ASP.NET Core路由URL生成异常求助:POST表单与GET路由错误问题

ASP.NET Core路由问题:POST动作URL生成异常分析

问题场景

我遇到了POST动作URL生成无效的问题,具体表现如下:

控制器代码

Home控制器的路由与动作定义:

[Route("[action]")]
public class Home : Controller
{
    [Route("/")]
    public IActionResult Index()
    {
        return View();
    }

    [HttpGet]
    [Route("{number}")]
    public IActionResult Edit(int number)
    {
        return View();
    }
    
    [HttpPost]
    public IActionResult Edit()
    {
        return View();
    }
}

正常URL生成情况

Index视图中生成Edit动作的链接是正确的,最终URL为/Edit/11,视图代码:

<a asp-action="Edit" asp-all-route-data='new Dictionary<string, string>{{"number", "11"}}'>GO TO EDIT</a>

表单URL生成异常

在Edit视图中,尝试创建提交至无路由参数的POST版Edit动作的表单时,期望生成的URL是/Edit,实际却生成了/Edit/11,导致无法匹配对应的POST动作。两种表单写法结果完全一致:

<div>
    <form asp-action="Edit" method="post">
        <button type="submit">submit</button>
    </form>
    
    @using (Html.BeginForm("Edit", "Home", FormMethod.Post))
    {
        <button type="submit">submit</button>
    }
</div>

另一个关联异常

若将POST动作的路由模板修改为:

[HttpPost]
[Route("something")]
public IActionResult Edit()
{
    return View();
}

会导致GET动作生成的链接变为错误的http://localhost:5253/Edit/something?number=11。

疑问

我怀疑这是个Bug,但可能存在疏漏,想明确以下问题:

  • 该行为是否涉及路由优先级?
  • 为何不同HTTP动词的动作会互相影响?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:37:18