ASP.NET MVC - MapRoute против маршрутов. Добавить (и 404) - PullRequest
20 голосов
/ 05 февраля 2009

Я только начинаю работать с ASP.NET MVC.

В чем разница между MapRoute и route.Add? Должен ли я просто использовать MapRoute? Могу ли я отобразить несколько маршрутов? Какие "карты" имеют приоритет ... те, которые вы назвали первыми или последними?

Я бы хотел сделать что-то похожее на то, что StackOverflow делает для пользователей. Но я бы хотел, чтобы URL соответствовал этому шаблону:
«Пользователь / {домен} / {имя пользователя}» для перенаправления на UserController

и для всех других запросов выполнить типичную маршрутизацию ASP.NET MVC. например:

        routes.MapRoute(
            "Default", "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" }  
        );

UPDATE:
При использовании URL: http://localhost:3962/User/MYDOMAIN/BTYNDALL
Я получаю сообщение об ошибке: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, изменилось его имя или временно недоступен.

Вот код, который я использую:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "User",                                                     
            "User/{domain}/{username}",                           
            new { controller = "User", action = "Index" }      
        );

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Home", action = "Index", id = "" }  
        );

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}

Ответы [ 3 ]

37 голосов
/ 05 февраля 2009

MapRoute() - это метод расширения над Routes.Add(). Используйте MapRoute(), если вам не нужно делать что-то более сложное, чем это позволяет.

Маршруты оцениваются в порядке, в котором они определены, поэтому те, которые вы называли первыми.

9 голосов
/ 05 февраля 2009

Ваш пользовательский контроллер должен иметь

public class UserController : Controller {
    public ActionResult Index(string domain, string username) { return View(); }
}

Две переменные в методе Index пользовательского контроллера выбираются из маршрута.

4 голосов
/ 01 мая 2010

Используйте!

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "User",                                                     
            "User/{domain}/{username}",                           
            new { controller = "User", action = "Index", username= UrlParameter.Optional }      
        );

       }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}
...