#asp.net-mvc-3 #url-rewriting
#asp.net-mvc-3 #url-перезапись
Вопрос:
У меня есть действие под названием Contact в домашнем контроллере
<mysite>/Home/Contact
Я хочу иметь возможность, набрав <mysite>/Contact
, получить тот же результат, что и <mysite>/Home/Contact
Возможно ли это сделать с помощью маршрутов mvc 3.0 или RouteMagic?
В настоящее время я пытаюсь добиться этого подобным образом, но безуспешно:
Пользовательские маршруты:
routes.MapRoute(
"Contact", // Route name
"Contact", // URL with parameters
new { controller = "Home", action = "Contact", id = UrlParameter.Optional } // Parameter defaults
);
RouteMagic:
var route = routes.MapRoute("new", "Contact");
routes.Redirect(r => r.MapRoute("old", "Home/Contact"))
.To(route);
Обновить
Хорошо, сначала следует определить пользовательские маршруты, теперь это работает (в случае пользовательских маршрутов), но появился новый вопрос why route magic returning error
:
Server Error in '/' Application.
Value cannot be null or empty.
Parameter name: controllerName
Ответ №1:
Убедитесь, что ваш новый маршрут появляется перед маршрутом по умолчанию (поскольку он также будет совпадать) при определении маршрута.
routes.MapRoute(
"Contact", // Route name
"contact", // URL with parameters
new { controller = "Home", action = "Contact", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Contact", id = UrlParameter.Optional } // Parameter defaults
);
Комментарии:
1. @Joper — маршрут по умолчанию должен быть последним добавленным маршрутом, чтобы все конкретные маршруты были сопоставлены первыми.
2. может быть, у вас есть какие-либо идеи, почему RouteMagic в этом случае возвращает значение error ‘, которое не может быть нулевым или пустым. Имя параметра: controllerName’
Ответ №2:
вы пробовали модуль перезаписи в iis7?
он прост в использовании, не загружайте его отсюда:
http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/
Комментарии:
1. я видел это, но лучше использовать преимущество маршрутов MVC по умолчанию.