我正在创建一个示例mvc应用程序,并在Home控制器中创建了两个操作方法(索引)。
public class HomeController : Controller
{
//
// GET: /Home/
public string Index()
{
return Index1();
}
public string Index(string message)
{
return "hello";
}
}
并且索引被设置为运行应用程序的默认操作。在运行应用程序时,我得到以下错误,
当前的行动请求'索引'在控制器类型上 ' HomeController的'以下操作方法之间不明确: System.String索引(Int32)类型 Mvc4example.Controllers.HomeController System.String Mvc4example.Controllers.HomeController类型的索引(System.String)
我所期望的是,如果没有查询字符串,它将调用无参数操作方法,如果传递了查询字符串消息,则会调用带参数的操作方法。
任何人都可以解释为什么会出现这种情况吗?
答案 0 :(得分:1)
如果您有两个具有相同名称的方法,则Http请求属性必须不同
public class HomeController : Controller
{
[HttpGet]
public string Index()
{
//...
}
[HttpPost]
public string Index(string message)
{
//...
}
}
答案 1 :(得分:0)
你有第三个这样的行动
public string Index(int id)
{
return "int";
}
会解释这种行为
当然,您也不需要无参数操作,这只是消息为空的特殊情况,消息为空
答案 2 :(得分:0)
请查看帖子中的答案:Routing: The current request for action [...] is ambiguous between the following action methods了解更多详情,但总结一下:
您最多只能有2个具有相同名称的操作方法 一个控制器,为了做到这一点必须是[HttpPost],并且 其他必须是[HttpGet]。
由于你的两个方法都是GET,你应该重命名其中一个 动作方法或将其移动到不同的控制器