Подтвердить что ты не робот

ASP.NET MVC - MapRoute против маршрутов .Add(и 404s)

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

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

Я бы хотел сделать что-то похожее на StackOverflow для пользователей. Но я хотел бы, чтобы URL-адрес соответствовал этому шаблону:
"Пользователь/{domain}/{username}", который должен быть перенаправлен в 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);
    }
}
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

Используйте

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