用于在MVC3中定义路由的文件

时间:2012-10-30 09:02:25

标签: asp.net-mvc asp.net-mvc-3 routes

我有这个文件:

<fru>
 <url action="product" controler="Home" params="{id=123}" >this_is_the_an_arbitrary_url_of_a_product.html</url>
 <url action="customer" controler="Home" params="{id=445}" >this_is_the_an_arbitrary_url_of_a_customer.html</url>
... other urls ...
</fru>

我正在寻找使用MVCHandler绑定此文件或此对象结构,以便将请求映射到带有参数的良好操作。 对于网址来说,重要的是网址不遵守任何结构规则。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您可以为MVC项目设置完全任意的路由,不受任何特定URL结构的限制。

在Global.asax.cs中:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
        "",
        "superweirdurlwithnostructure.whatever",
        new { controller = "Home", action = "Products", id = 500 }
    );
}

确保在映射正常路由之前执行此操作。这些特定的需要先行,否则默认路由条目将阻止请求通过。

如果你想把它放在你展示的XML文件上,我会做一些简单的事情:

XDocument routes = XDocument.Load("path/to/route-file.xml");
foreach (var route in routes.Descendants("url"))
{
    //pull out info from each url entry and run the routes.MapRoute(...) command
}

XML文件本身当然可以以某种方式嵌入到项目中,这取决于您。

修改

对于参数的处理,您可以使用routes.MapRoute(...)命令轻松发送所需的任何参数。只需像这样添加它们:

routes.MapRoute(
    "",
    "my/route/test",
    new { controller = "Home", action = "Index",
          id = "500", value = "hello world" } // <- you can add anything you want
);

然后在动作中,你只需这样做:

//note that the argument names match the parameters you listed in the route:
public ActionResult Index(int id, string value)
{
    //do stuff
}