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
相关产品推荐
相关产品推荐

