很清楚在你的网站上使用漂亮网址的优点是什么。
让我用一个例子来澄清我在问什么。要注意,此处的实体不能通过名称进行单点识别。
假设用户想要查看您站点上注册的所有在特定位置可用的无线电台。这是通过访问网址来完成的: http://example.com/radios/1234/radio-paris-eiffel-tower
如果用户想要查看特定无线电台可访问的所有位置,他们可以使用: http://example.com/locations/abcd/radio-xyz
现在的问题是:在特定位置(如姓名,频率等)访问特定广播电台的广播电台详细信息会有什么好处?
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/
wdyt?
我怎么能将这样的路由映射到RadiosController.ListByLocation(int locationId)?
答案 0 :(得分:3)
以下是使用自定义路线的建议。我在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
现在,您可以构建任何适合您需求的友好URL。也许您想将/ radio / details前缀更改为其他内容?