c# - 在 ASP.NET MVC 中动态生成许多路由...这是一个完全糟糕的主意吗?

标签 c# asp.net asp.net-mvc routing asp.net-mvc-routing

这是我的困境。我有一组实体,我想将它们定义为一组路线的起点。例如,我想为我站点中的所有用户提供他们自己的表单 mydomain.com/username 的“子站点”,然后将所有 UserController 操作挂起。

这是我正在做的一个粗略的例子:

我有一个“UserController”,带有“Index”、“Profile”和“Bio”等操作方法。

public ActionResult Profile( int UserID )
{
    User u = User.SingleOrDefault(u => u.UserID == UserID);
    return View(u);
}

在 RegisterRoutes() 方法中,我这样做:

foreach (User user in User.Find(u => u.Active == true))
{
    routes.MapRoute(
         "",
         user.UserName + "/{action}",
         new { controller="User", action="Index", UserID=user.UserID }
     );
}

这行得通,而且完全符合我的要求:

domain.com/[username]/Profile
domain.com/[username]/Bio

现在是有效的工作路线,它们可以将 UserID 作为 Controller 中的方法参数,因为每个用户都有自己的路线。此外,默认路由仍然有效。是的。

我的问题是,这疯了吗?我正在为系统中的每个用户在路由表中创建一个条目。多少条路线太多了?如果有超过 10 个用户,这会杀死我的服务器吗? 50? 1000?

如果这很疯狂,我还能如何实现这个目标?

提前致谢。我期待着蜂群思维的一些输入。

最佳答案

我对您的方法有很多担忧。如果有人的用户名与您的其他 Controller 名称之一匹配怎么办?您将永远无法调用该 Controller 。此外,路由系统(据我所知)按顺序测试所有路由,这意味着数千条路由将开始减慢路由查找,包括生成 Urls(如 Url.Content()Route.GetVirtualPath()).

你就不能这样吗

/{username}/{action}

并将用户名作为参数的一部分传递?如果每条路由都指向相同的 Controller 和操作方法,那么为每个用户生成路由有什么意义?

如果您只需要匹配用户 Controller ,consider implementing a custom route constraint .该链接提供了创建 Controller 参数必须匹配的值列表的示例,但您可以轻松地为您的 Action 方法名称执行此操作。或者,您的自定义约束代码可以在数据库中查找用户名以查看它是否匹配。

关于c# - 在 ASP.NET MVC 中动态生成许多路由...这是一个完全糟糕的主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099289/

相关文章:

c# - 如何使用 Mongodb/Couchdb 创建我的 DDD 实体?

c# - ServiceStack: View 中未使用自定义应用程序设置

ASP.NET AutoCompleteExtender CompletionListCssClass

c# - 返回多个 selectlist 和一个 actionresult

.net - 外部 AppSettings 文件不适用于链接文件

c# - 将 TextBox 绑定(bind)到 Nullable Double?

c# - HttpWebRequest SSL 仅适用于某些网站

asp.net - 使用电子邮件而不是用户名恢复密码

asp.net - Web API 2 身份./Token 总是返回404错误

javascript - 如何调用MVC telerik网格刷新按钮的onclick事件