2011-01-21 38 views
1

我在MCTS考試中收到以下問題。這本書說答案是C,但我認爲B將是正確的答案。爲什麼它是C如何編寫允許在ASP.NET MVC中使用下劃線的路線?

您創建了一個新的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個字符之間。你該怎麼辦?

A.用下面的代碼段替換第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}" }); 

C.在第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}" }); 

回答

4

當ASP.NET MVC的路線尋找一個動作映射到,它需要幾件事情考慮:

  1. 的動作名稱(不區分大小寫)
  2. 參數名稱(不區分大小寫)
  3. 約束是否與路徑匹配。

正因爲如此,如果你要匹配你列出的條件的路線,這條路線是正確的答案:

routes.MapRoute( 
    "Details by Username", 
    "{username}", 
    new { controller = "Home", action = "DetailsByUsername" }, 
    new { username = @"\w{3,20}" } 
); 

這種結構的URL將匹配以下原因路線:

http://example.com/my_user_name 
  1. 動作名稱匹配,
  2. 它尋找一個parame在名爲「用戶名」的操作中,並且
  3. 符合非字母數字字符的條件。

C是正確答案,因爲它增加了當前路線。

答案B取代了現有的路由定義,從而阻止了默認路由到Home控制器Index的操作。

+0

此外,我會說「B」是不正確的,因爲這條線的問題:「用戶名稱被輸入爲路徑時必須顯示用戶的詳細信息」。對我而言,這意味着需要支持瀏覽http://blah.com/JCapriotti。但是,「B」只支持http://blah.com/Home/DetailsByUserName/JCapriotti。 – 2011-01-21 21:11:23

2

C是對的。

對於B,如果替換第05行,那麼所有其他路線將不起作用。 您還需要在第04行插入,因爲如果沒有,05行的路線在它有機會之前就會抓住它。

1

替換路由將使Details無效,因爲Id不再被映射。

C是正確的

相關問題