Неоднозначные методы действия с разными HttpMethod
Я испытываю странное поведение, по крайней мере для меня. Я написал два метода в контроллере с явно разными сигнатурами:
[Route("~/Wallets/{walletId}/Transactions/Add")]
public async Task<ActionResult> Add(long walletId)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Add(AddTransactionViewModel model)
Дело в том, что каждый раз, когда я пытаюсь вызвать метод POST с помощью Ajax.BeginForm, вызывается метод GET (первый).
@using (Ajax.BeginForm("Add", "Transactions",
new AjaxOptions() { HttpMethod = "POST" })
{
...
}
Теперь, почему это происходит? Конечно, если я изменю имя метода GET, скажем, на AddTransaction, код работает, но я хочу понять, почему это не так, как есть.
1 ответ
Решение
Это связано с тем, что BeginForm внутренне использует GetVirtualPath для получения URL- адреса из таблицы маршрутов. Первая ссылка добавлена в таблицу маршрутов в вашем примере.
Простое редактирование метода POST с помощью следующего должно помочь:
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Add")]
public async Task<ActionResult> Add(AddTransactionViewModel model)