Одним из решений является добавление нескольких маршрутов.
routes.MapRoute(
name: "article1",
url: "article1",
defaults: new { controller = "<YourControllerName>", action = "article1" }
);
routes.MapRoute(
name: "article2",
url: "article2",
defaults: new { controller = "<YourControllerName>", action = "article2" }
);
Edit:
Из комментария ОП понимается, что будет 'n' количество статей (URL). Чтобы справиться с этим, мы можем создать собственный обработчик маршрута.
Шаг 1 : создание нового пользовательского обработчика маршрута, унаследованного от MvcRouteHandler
public class CustomRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var controller = requestContext.RouteData.Values["controller"].ToString();
requestContext.RouteData.Values["controller"] = "Home";
requestContext.RouteData.Values["action"] = "Index";
requestContext.RouteData.Values["articleId"] = controller;
return base.GetHttpHandler(requestContext);
}
}
Шаг 2 : зарегистрировать новый маршрут. Обязательно добавьте этот маршрут перед маршрутом по умолчанию.
routes.Add("Article", new Route("{controller}", new CustomRouteHandler()));
В данном классе CustomRouteHandler, Controller и Action жестко закодированы как «Home» и «Index» соответственно. Вы можете изменить это на свой собственный контроллер и имя действия. Также вы увидите параметр articleId для RouteData.Values. С этим параметром вы получите articleId в качестве параметра в вашем методе Action.
public ActionResult Index(string articleId)
{
return View();
}
После всех изменений для URL http://www.example.com/article1, метод Index () HomeController вызывается со значением articleId, установленным в «article1».
Аналогично для http://www.example.com/article2, метод Index () вызывается с параметром articleId, установленным в «article2».