具有不同 HttpMethod 的不明确操作方法
Ambiguous action methods with different HttpMethod
我遇到了一种奇怪的行为,至少对我来说是这样。我在一个控制器中写了两个方法,签名明显不同:
[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,则代码可以正常工作,但我想了解为什么它不是原样。
这是因为 BeginForm 在内部使用 GetVirtualPath 从路由 table 获取 url。在您的示例中,第一个 link 添加到路由 table。
只需使用以下内容编辑 POST 方法即可:
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Add")]
public async Task<ActionResult> Add(AddTransactionViewModel model)
我遇到了一种奇怪的行为,至少对我来说是这样。我在一个控制器中写了两个方法,签名明显不同:
[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,则代码可以正常工作,但我想了解为什么它不是原样。
这是因为 BeginForm 在内部使用 GetVirtualPath 从路由 table 获取 url。在您的示例中,第一个 link 添加到路由 table。
只需使用以下内容编辑 POST 方法即可:
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Add")]
public async Task<ActionResult> Add(AddTransactionViewModel model)