代码之家  ›  专栏  ›  技术社区  ›  memical

基于多个参数的漂亮URL

  •  3
  • memical  · 技术社区  · 16 年前

    很明显,在你的网站上使用漂亮的URL有什么好处。

    假设用户希望查看在您的站点上注册的、在特定位置可用的所有无线电台。这是通过访问url来实现的: http://example.com/radios/1234/radio-paris-eiffel-tower

    • 巴黎埃菲尔铁塔电台-只是额外的信息,使网址更好。

    如果用户想查看可访问特定电台的所有位置,他们可以使用: http://example.com/locations/abcd/radio-xyz

    • abcd-此处标识收音机

    现在的问题是:什么是一个很好的url来访问特定位置的特定电台的详细信息(如名称、频率等)?

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

    你有什么建议,请你也给我一个关于如何编码你的建议网址的路线的例子?

    非常感谢你。

    ps公司 http://example.com/radios/1234/radio-paris-eiffel-tower

    会更好 http://example.com/1234/radio-paris-eiffel-tower/radios/

    如何将这样的路由映射到radiocontroller.ListByLocation(int locationId)?

    1 回复  |  直到 16 年前
        1
  •  3
  •   a7drew    16 年前

    这里有一个使用自定义路线的建议。我在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();
        }
    
    }
    

    并响应以/radio/details为前缀的URL:

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

    现在,你可以建立任何一种友好的网址,适合你的需要。也许你想把/radio/details前缀改成别的?