如何在控制器中添加路由

本文关键字:添加 路由 控制器 | 更新日期: 2023-09-27 18:21:17

我想在向db提交一个新对象后映射一个新路由。因此,例如,如果我输入名为"Test"的对象,我希望立即有一个新的路由,以解决"Test.aspx"。

我试过

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

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

如何在控制器中添加路由

您应该避免动态注册路由。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" })