gpt4 book ai didi

asp.net-mvc - 如何动态添加到 ASP.NET MVC RouteTable?

转载 作者:行者123 更新时间:2023-12-04 00:18:42 28 4
gpt4 key购买 nike

我们在我们的网站上有一个区域,人们可以在那里注册并在我们希望在 ~/pageSlug 上托管的网站上获得他们自己的页面。我已经尝试使用 Global.asax 中的规则来完成它,但这破坏了允许 ~/Controller 直接映射到 Index 操作的基本默认路由。我不允许在 userSlug 前面放置任何类型的分隔符,所以 ~/p/pageSlug 在这里并不是一个真正的选择。

在将用户页面添加到路由方面,我在 App_Start 处循环浏览页面并将它们显式添加到 RoutesTable。这工作正常,并且我们已将 AppPool 刷新设置为足够长的时间,使其成为每天一次的任务。不过,这确实让我们有 24 小时的周转时间为我们的用户“获取页面实时”,我正在努力解决这个问题。

理想情况下,我想做的是在用户注册后动态地将相关路由添加到 RouteTable。我试过这样做:

RouteTable.Routes.Add(
RouteTable.Routes.MapRoute(
toAdd.UrlSlug + "Homepage",
toAdd.UrlSlug,
new { controller = "Controller", View = "View", urlSlug = toAdd.UrlSlug }
)
);

但这似乎不起作用。我在其他任何地方都找不到解决方案,而且我确信我的代码非常幼稚,而且暴露了对路由的缺乏了解 - 请帮助!

最佳答案

如果你尝试这个,使用路由约束怎么办。获取所有用户的列表并限制所选路由以匹配该列表中的条目

public class UserPageConstraint : IRouteConstraint
{
public static IList<string> UserPageNames = (Container.ResolveShared<IUserService>()).GetUserPageNames();

bool _IsUserPage;
public UserPageConstraint(bool IsUserPage)
{
_IsUserPage = IsUserPage;
}

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (_IsUserPage)
return UserPageNames.Contains(values[parameterName].ToString().ToLower());
else
return !UserPageNames.Contains(values[parameterName].ToString().ToLower());
}
}

然后在Global.asax.cs中,为用户设置路由如下:
routes.MapRoute("UserHome", "{userPage}", new { controller = "UserPageController", action = "Index" }, new { userPage = new UserPageConstraint(true) });

对于上面这个路由,在 UserPageController 的 action 'index' 中,我们将 userPage 作为参数。

对于其他相对于 userPage Home 的路由,我们可以相应地添加路由。例如,用户详细信息页面路由可以添加如下:
routes.MapRoute("UserHome", "{userPage}/mydetails", new { controller = "UserPageController", action = "Details" }, new { userPage = new UserPageConstraint(true) });

你可以试试这个看看。

关于asp.net-mvc - 如何动态添加到 ASP.NET MVC RouteTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849156/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com