20

我刚刚开始使用 ASP.NET MVC。

MapRoute 和 routes.Add 有什么区别?我应该只使用 MapRoute 吗?我可以映射多条路线吗?哪些“地图”优先……您首先或最后调用的那些?

我希望能够为用户做一些类似于 StackOverflow 的事情。但我希望 URL 适合这种模式:
“User/{domain}/{username}”被路由到 UserController

并为所有其他请求执行典型的 ASP.NET MVC 路由。前任:

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

更新:
使用 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);
    }
}
4

3 回答 3

37

MapRoute()是一个扩展方法Routes.Add()。使用MapRoute(), 除非你需要做一些比它允许的更复杂的事情。

路由按照定义的顺序进行评估,因此您首先调用的那些。

于 2009-02-04T22:30:30.213 回答
9

您的用户控制器应该有

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

用户控制器的 Index 方法上的两个变量是从路由中获取的。

于 2009-02-04T23:16:56.437 回答
4

采用!

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);
    }
}
于 2010-05-01T17:58:26.513 回答