Я достиг этого с помощью Маршрутизация атрибутов в MVC5. По общему признанию, я новичок в MVC из десятилетия веб-разработки с использованием WebForms, но для меня это работало. В отличие от принятого ответа, все перегруженные действия могут быть отображены одним и тем же файлом.
Сначала включите маршрутизацию атрибутов в App_Start / RouteConfig.cs.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
класс контроллера с префиксом маршрута по умолчанию.
[RoutePrefix("Returns")]
public class ReturnsController : BaseController
{
//.......
Затем украсьте действия вашего контроллера, которые перегружают друг друга общим маршрутом и параметрами. Используя ограниченные по типу параметры, вы можете использовать один и тот же формат URI с идентификаторами разных типов.
[HttpGet]
// Returns
public ActionResult Index()
{
//.....
}
[HttpGet]
[Route("View")]
// Returns/View
public ActionResult View()
{
// I wouldn't really do this but it proves the concept.
int id = 7026;
return View(id);
}
[HttpGet]
[Route("View/{id:int}")]
// Returns/View/7003
public ActionResult View(int id)
{
//.....
}
[HttpGet]
[Route("View/{id:Guid}")]
// Returns/View/99300046-0ba4-47db-81bf-ba6e3ac3cf01
public ActionResult View(Guid id)
{
//.....
}
Надеюсь, это поможет и не приведет кого-то к неправильному пути. : -)