ASP.NET Перезапись URL-адреса MVC 3.0

#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 по умолчанию.