У меня есть требование, при котором ресурсы на домашнем контроллере должны быть доступны без необходимости вводить имя контроллера в URL. Например, действие index
должно быть загружено, когда я перехожу к mysite.com/
, и контактная страница должна быть загружена с использованием mysite.com/contact
и так далее.MVC 5 Маршрутизация атрибутов: удаление ненужного атрибута маршрута из действия контроллера
Контроллер ниже удовлетворяет этому требованию, но мне интересно, есть ли способ удалить атрибуты маршрута с тем же именем, что и действие контроллера?
Например, используя [Route("contact")]
для действия контакт не имеет смысла. Когда я удаляю этот атрибут маршрута, URL-адрес генерируется как mysite.com/home/contact
, тогда как я хочу, чтобы это было mysite.com/contact
.
[RoutePrefix("")] // Remove the name of the controller from the URL
public class HomeController : Controller
{
public ViewResult Index()
{
return View("Index");
}
[Route("contact")]
public ViewResult Contact()
{
return View("Contact");
}
[Route("about")]
public ViewResult About()
{
return View("About");
}
[Route("terms-and-conditions")]
public ViewResult TermsAndConditions()
{
return View("TermsAndConditions");
}
}
FYI, вот мой маршрут конфигурации:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.LowercaseUrls = true;
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
и событие Application_Start:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}