ASP.NET MVC Маршрутизация входящих URL

DrunkCat

Разбираюсь с ASP.NET MVC 3. Вроде пока все понятно, за исключением одной вещи: не могу понять как framework определяет какой из перегруженных методов действий вызывать?Есть два метода действий
public class ContractorController : Controller
{
 public ActionResult Edit(Contractor newContractor)
 {
 ...
 return View();
 }
 public ActionResult Edit(Guid contractorId)
 {
 ...
 return View();
 }
}
При запросе вида http://localhost:2082/Contractor/Edit?contractorId=e510c6c8-4a55-42f1-bc8a-4e90c25818a0генерируется следующие исключение:
Текущий запрос для действия "Edit" на контроллере типа "ContractorController" является неоднозначным на следующих методах действий:System.Web.Mvc.ActionResult Edit(System.Guid) на типе RegisterApp.Controllers.ContractorControllerSystem.Web.Mvc.ActionResult Edit(RegisterApp.Models.Contractor) на типе RegisterApp.Controllers.ContractorController
На мой взгляд должен был вызваться определенно второй метод. В чем дело? Объясните все тонкости, пожалуйста.
2 ответа

DrunkCat

Ну как-то такhttp://stackoverflow.com/questions/1141641/overloading-asp-net-mvc-controller-methods-with-same-verbПерегрузить можно либо с разным количеством входных параметров, либо используя атрибуты ActionName, HttpPost


DrunkCat

Разбираюсь с ASP.NET MVC 3. Вроде пока все понятно, за исключением одной вещи: не могу понять как framework определяет какой из перегруженных методов действий вызывать?Есть два метода действий
public class ContractorController : Controller
{
 public ActionResult Edit(Contractor newContractor)
 {
 ...
 return View();
 }
 public ActionResult Edit(Guid contractorId)
 {
 ...
 return View();
 }
}
На мой взгляд должен был вызваться определенно второй метод. В чем дело? Объясните все тонкости, пожалуйста.
public class ContractorController : Controller
{
 public ActionResult Edit(Contractor newContractor)
 {
 ...
 return View();
 }
 [HttpGet]
 public ActionResult Edit(Guid contractorId)
 {
 ...
 return View();
 }
}
Вот так он будет вызываться...