2010-07-07 105 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前缀改成别的东西?