我想在将新对象提交到db之后映射新路由。因此,例如,如果我输入名称为“测试”的对象,我希望立即建立新路线,以解析“ Test.aspx ”。
我试过
System.Web.Routing.RouteTable.Routes.MapRoute(obj.NameUrl, obj.NameUrl + extension, new { controller = "per", action = "Index", name = obj.NameUrl });
在控制器中,但它不起作用(没有错误,可能在生命周期中的时间可能不正确?)。相同的代码适用于Application_Start()
答案 0 :(得分:3)
您应该避免动态注册路由。 Application_Start
中的以下静态路由应该能够处理具有动态路由参数的场景:
routes.MapRoute(
"page",
"{name}.aspx",
new { controller = "per", action = "index" },
new { name = @"[a-z0-9]+" }
);
如果扩展名也必须是动态的:
routes.MapRoute(
"page",
"{name}.{extension}",
new { controller = "per", action = "index" },
new { name = @"[a-z0-9]+", extension = @"[a-z]{3,4}" }
);
然后您可以使用Index操作来处理对此路由的请求:
public class PerController: Controller
{
public ActionResult Index(string name, string extension)
{
...
}
}
如果您想生成此操作的链接:
@Html.RouteLink("go to foo", "page", new { name = "foo", extension = "aspx" })