2010-07-07 106 views
3

很明顯,在您的網站中使用好的網址的優點是什麼。基於多個參數的好網址

讓我通過一個例子來說明我在問什麼。注意這裏的實體不能通過名稱來唯一標識。

假設用戶希望看到在您的網站上註冊的所有在特定位置可用的電臺。這是通過訪問URL來完成: http://example.com/radios/1234/radio-paris-eiffel-tower

  • 1234 - 這裏指的是一個位置
  • 無線電巴黎埃菲爾鐵塔塔的唯一ID - 僅僅是附加信息,使URL更好。

如果用戶希望看到的所有位置,其中一個特定的電臺是accessibile他們可以使用: http://example.com/locations/abcd/radio-xyz

  • ABCD - 這裏標識無線電

現在的問題是:什麼會是一個很好的網址,用於訪問特定電臺(如名稱,頻率,...)的特定廣播電臺的詳細信息?

http://example.com/radio/1234/radio-paris-eiffel-tower/abcd/radio-xyzhttp://example.com/radio/details?radioid=1234&locationid=abcd/radio-xyz-at-paris-eiffel-tower

你有什麼建議,請你也給我如何爲您建議的URL編碼路線的例子嗎?

非常感謝。

PS: 實際上思維,而不是 http://example.com/radios/1234/radio-paris-eiffel-tower

更好的關於上述網址,這將是 http://example.com/1234/radio-paris-eiffel-tower/radios/

wdyt?

我怎麼能將這樣的路線映射到RadiosController.ListByLocation(int locationId)?

回答

2

下面是使用自定義路線的建議。我在的Global.asax.cs文件中進行設置:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Radio and Frequency Route", // Route name 
     "radio/details/{radioId}/{locationId}/{someUnusedName}", // URL with parameters 
     new 
     { 
      controller = "Some", 
      action = "SomeAction", 
      radioId = string.Empty, 
      locationId = string.Empty 
     } 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 

} 

控制器是非常簡單的:

public class SomeController : Controller 
{ 
    public ActionResult SomeAction(string radioId, string locationId) 
    { 
     ViewData["radioId"] = radioId; 
     ViewData["locationId"] = locationId; 

     return View(); 
    } 

} 

,並回應那些前綴/收音機/細節網址:

http://localhost:51149/radio/details/123/456/moo 
http://localhost:51149/radio/details/abc/xyz/foo 

現在您可以建立任何適合您需要的友好網址。也許你想把/ radio/details前綴改成別的東西?