如何在控制器中添加路由

时间:2012-01-25 13:38:16

标签: c# asp.net asp.net-mvc-3 routes asp.net-mvc-routing

我想在将新对象提交到db之后映射新路由。因此,例如,如果我输入名称为“测试”的对象,我希望立即建立新路线,以解析“ Test.aspx ”。

我试过

System.Web.Routing.RouteTable.Routes.MapRoute(obj.NameUrl, obj.NameUrl + extension, new { controller = "per", action = "Index", name = obj.NameUrl });

在控制器中,但它不起作用(没有错误,可能在生命周期中的时间可能不正确?)。相同的代码适用于Application_Start()

1 个答案:

答案 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" })