我有这个文件:
<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绑定此文件或此对象结构,以便将请求映射到带有参数的良好操作。 对于网址来说,重要的是网址不遵守任何结构规则。
有办法做到这一点吗?
答案 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
}