【问题标题】:Ambiguous action methods with different HttpMethod具有不同 HttpMethod 的模棱两可的动作方法
【发布时间】:2016-11-20 17:51:02
【问题描述】:

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

[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 代码可以工作,但我想了解为什么它不能按原样进行。

【问题讨论】:

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


    【解决方案1】:

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

    只需使用以下内容编辑 POST 方法即可:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 2011-08-09
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多