MVC 4:自定义路线

时间:2012-09-20 18:10:30

标签: asp.net-mvc-4 asp.net-mvc-routing

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

2 个答案:

答案 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