2011-05-01 3 views
0

писать свой у меня есть действие называется контакт в домашнем контроллереASP.NET MVC 3.0 Url

<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); 

Update

Ok пользовательские маршруты должен быть определен первым, теперь он работает (в случае пользовательских маршрутов), но там я s появился новый вопрос: 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 
); 
+0

спасибо, я подумал об этом, но был немного ленив, чтобы попробовать. – Joper

+0

@Joper - маршрут по умолчанию должен быть последним добавленным маршрутом, чтобы вначале были сопоставлены все определенные маршруты. – tvanfosson

+0

Возможно, у вас есть идеи, почему RouteMagic в этом случае возвращает ошибку «Значение не может быть пустым или пустым. Имя параметра: controllerName ' – Joper