有人可以解释一件事。
我的控制器中有两种方法:
public ActionResult AddPredefinedTicket(int customerId) {...}
和
public ActionResult AddPredefinedTicket(int customerId, TicketTypes type, string additionalJsonParameters) {...} (here TicketTypes is enum)
我想使用像
这样的网址拨打电话
http://.../Ticket/AddPredefinedTicket?customerId=1082
出于某种原因,我得到了一个例外:
The current request for action 'AddPredefinedTicket' on controller type 'TicketController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult AddPredefinedTicket(Int32) on type CallCenter.CustomerService.Controllers.TicketController
System.Web.Mvc.ActionResult AddPredefinedTicket(Int32, CallCenter.CustomerService.Data.Models.TicketTypes, System.String) on type CallCenter.CustomerService.Controllers.TicketController
但是,我不明白为什么MVC认为请求是模棱两可的。 从我的URL调用中可以看出,我没有传递'type'或'additionalJsonParameters'参数。 我明白,additionalJsonParameters是字符串,所以它可以为null。
但是该动作也有“type”参数,即enum,不能为null。
在我看来,MVC应该使用第一个动作,但事实并非如此。
你能解释一下原因吗?
答案 0 :(得分:1)
您是否忘记使用[HttpGet],[HttpPost]属性修饰您的方法。
答案 1 :(得分:0)
你不能重载你的ActionResults。
“控制器动作必须满足一些额外的要求。用作控制器动作的方法不能重载。此外,控制器动作不能是静态方法。除此之外,你可以使用几乎任何方法作为控制器动作。“
答案 2 :(得分:0)
将第一种方法的逻辑放在第二种方法中。
在那里办理支票,如
if(type==null && string.IsNullOrEmpty(additionalJsonParameters){
//do logic from method 1
}
else{
//do logic from method 2
}