使用不同HttpMethod的不明确的动作方法

时间:2016-11-20 17:51:02

标签: c# asp.net-mvc action method-signature ambiguous-call

我经历了一种奇怪的行为,至少对我而言。我在控制器中编写了两种方法,这些方法具有明显不同的签名:

[Route("~/Wallets/{walletId}/Transactions/Add")]
public async Task<ActionResult> Add(long walletId)

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Add(AddTransactionViewModel model)

每当我尝试使用Ajax.BeginForm调用POST方法时,就会调用GET方法(第一个)。

@using (Ajax.BeginForm("Add", "Transactions", 
    new AjaxOptions() { HttpMethod = "POST" }) 
{ 
    ... 
}

现在,为什么会这样?当然,如果我将GET方法的名称更改为AddTransaction,则代码可以正常工作,但我想理解为什么它不是原样。

1 个答案:

答案 0 :(得分:1)

这是因为BeginForm在内部使用GetVirtualPath来获取路由表中的url。第一个链接将添加到示例中的路由表中。

使用以下命令编辑POST方法应该可以解决问题:

[HttpPost]
[ValidateAntiForgeryToken]
[Route("Add")]
public async Task<ActionResult> Add(AddTransactionViewModel model)