我在MCTS考试中收到以下问题。该书说答案是C
,但我认为B
将是正确的答案。为什么是C
?
您创建一个新的ASP.NET MVC 2 Web应用程序。在中创建以下默认路由
Global.asax.cs
文件。 (行号仅供参考。)
01 public static void RegisterRoutes(RouteCollection routes)
02 {
03 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
04
05 routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } );
06 }
您实现了一个名为HomeController的控制器,其中包含具有以下内容的方法 签名。
public ActionResult Index()
public ActionResult Details(int id)
public ActionResult DetailsByUsername(string username)
您需要添加路线以满足以下要求:
通过调用DetailsByUsername操作将用户名作为路径输入时,必须显示用户的详细信息。
用户名可以包含字母数字字符和下划线,长度可以在3到20个字符之间。你应该怎么做?
一个。用以下代码段替换第05行。
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "DetailsByUsername", id = "" } );
B中。用以下代码段替换第05行。
routes.MapRoute( "Default", "{controller}/{action}/{username}", new { controller = "Home", action = "DetailsByUsername", username = "" }, new { username = @"\w{3,20}" } );
℃。在第04行,添加以下代码段。
routes.MapRoute( "Details by Username", "{username}", new { controller = "Home", action = "DetailsByUsername" }, new { username = @"\w{3,20}" } );
d。在第04行,添加以下代码段。
routes.MapRoute( "Details by Username", "{id}", new { controller = "Home", action = "DetailsByUsername" }, new { id = @"\w{3,20}" } );
答案 0 :(得分:4)
当ASP.NET MVC路由查找要映射到的操作时,需要考虑几个因素:
因此,如果您想要一条符合您列出的标准的路线,这条路线将是正确答案:
routes.MapRoute(
"Details by Username",
"{username}",
new { controller = "Home", action = "DetailsByUsername" },
new { username = @"\w{3,20}" }
);
具有此结构的URL将匹配该路由,原因如下:
http://example.com/my_user_name
C是正确答案,因为它会添加到当前路线中。
答案B取代现有的路由定义,从而阻止默认路由到Home
控制器Index
操作。
答案 1 :(得分:2)
C是对的。
对于B,如果您更换第05行,那么所有其他路线将无效。 你还需要在第04行插入,因为如果没有,05行路线将在它有机会之前捕获它。
答案 2 :(得分:1)
替换路线会使Details
无效,因为Id不再映射。
C是正确的