ASP.NET MVC 4网站。
有一个名为“Locations”的数据库表,它只包含三个可能的位置(例如“CA”,“NY”,“AT”) 默认路线为:
http://server/Location/ --- list of Locations
http://server/Location/NY --- details of NY-Location
如何在没有/ Location / - 位的情况下创建自定义路由? (我发现它更好一点)
那样
http://server/NY - details of NY
http://server/AT - details of AT
.... etc...
和
http://server/Location --- list of Locations
答案 0 :(得分:7)
解决方案是使用路径约束执行自定义路由: (订单很重要)
routes.MapRoute(
name: "City",
url: "{city}",
constraints: new { city = @"\w{2}" },
defaults: new { controller = "Location", action = "Details", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
使用匹配的控制器:
public class LocationController : Controller
{
//
// GET: /Location/
public ActionResult Index()
{
return View();
}
//
// GET: /{city}
public ActionResult Details(string city)
{
return View(model:city);
}
}
如果您只想允许NY,CA和AT,您可以写下路线约束,如:
constraints: new { city = @"NY|CA|AT" }
(小写也适用)。另一个更通用的解决方案是使用路由约束来实现自己的IRouteConstraint
。 Se my previous answer。
答案 1 :(得分:0)
您需要指定控制器内的路线。请查看本教程,了解如何指定路由约束:
http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs
您使用路由约束来限制匹配的浏览器请求 特定的路线。您可以使用正则表达式指定 路线约束。
另请看这篇文章:How to map a route for /News/5 to my news controller