我想为我的用户提供一个虚荣网址,例如:
www.foo.com/sergio
我需要创建什么样的路线?
想象一下,我有以下控制器和操作,如何将虚 URL 映射到该控制器?
public ActionResult Profile(string username)
{
var model = LoadProfile(username);
return View(model);
}
这是我尝试过的以及会发生什么:
选项 A:
每个 url 都在这条路由中被捕获,这意味着我输入的每个 URL 都将我引导到 Account 控制器,而不仅仅是foo.com/[USERNAME]
. 不好。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Profile",
"{username}",
new { controller = "Account", action = "Profile", username = UrlParameter.Optional }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
选项 B:
默认路由运行良好,但在尝试访问配置文件时foo.com/[USERNAME]
出现 HTTP 404 错误。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"DentistProfile",
"{username}",
new { controller = "Account", action = "Profile", username = UrlParameter.Optional }
);
}