到目前为止,我仍然有标准路由。我试图做的是
public Foo : Controller
{
public ActionResult Index(int id)
{
return View("List", repo.GetForId(id));
}
public ActionResult Index()
{
return View("List", repo.GetAll());
}
}
我输入的网址是 本地主机/美孚/索引。 我认为它很聪明,可以找出我想要的方法。我得到的只是一个错误,告诉我这个电话是不明确的。从阅读路线教程我认为这将有效。我错过了什么?
抱歉:
重复。我投票结束。
答案 0 :(得分:2)
方法重载(具有相同名称的两个操作)解析基于HTTP谓词。这意味着如果您想要使用相同名称的两个操作,则需要通过它们接受的HTTP谓词来区分它们:
public ActionResult Index(int id)
{
return View("List", repo.GetForId(id));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index()
{
return View("List", repo.GetAll());
}
因此,当您致电GET /Home/Index
时,将调用第一个操作,当您调用POST /Home/Index
时,将调用第二个操作。
另请注意,您应该使用可空整数作为id
参数,因为如果请求中没有传递参数,则模型绑定器将失败。
一种RESTful方式来处理这个问题,遵循我建议的惯例:
public ActionResult Index()
{
return View(repo.GetAll());
}
public ActionResult Show(int id)
{
return View(repo.GetForId(id));
}
允许您处理/Home/Index
和/Home/Show/10
个请求。您可能也会有不同的观点,因为第一个会被强烈输入IEnumerable<T>
,而第二个会被强加到T
。