我刚刚开始使用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 = "" }
);
更新
使用网址时: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);
}
}
答案 0 :(得分:37)
MapRoute()
是Routes.Add()
上的扩展方法。使用MapRoute()
,除非您需要做一些比它允许的更复杂的事情。
路由按照定义的顺序进行评估,因此您首先调用它们。
答案 1 :(得分:9)
您的用户控制器应该
public class UserController : Controller {
public ActionResult Index(string domain, string username) { return View(); }
}
用户控制器的Index方法的两个变量从路径中获取。
答案 2 :(得分: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);
}
}