Неоднозначные методы действия с разными 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)
Другие вопросы по тегам