gpt4 book ai didi

c# - 我的路线没有启动,这应该有效吗?

转载 作者:行者123 更新时间:2023-12-03 21:50:09 24 4
gpt4 key购买 nike

对于我的管理区域,我创建了一条特殊路线。我这样做是为了让我的网址看起来更干净,并且避免了我有 2 个同名 Controller 的问题。

示例:我有一个 UserController 和另一个用于应用程序管理站点的 AdminUserController。

我不想要这样的 URL:

http://www.example.com/user/...
http://www.example.com/admin/adminuser/...

我希望管理网址看起来像:

http://www.example.com/admin/user/...

现在为了获取这个 url 结构,我尝试了以下方法:

我将我的管理 Controller 命名为:AdminUserController

然后我的路线如下:

routes.Add(new Route("admin/Admin{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""});
});

这能行吗? (该路线目前无法使用)

我确保这条路线位于通用路线之上。

更新

我希望所有管理 URL 都以/admin/文件夹为前缀,因此:

www.example.com/admin/user
www.example.com/admin/settings
www.example.com/admin/articles

和非管理员就像:

www.example.com/user
www.example.com/articles

最佳答案

不,那行不通。

请记住,我们将“Controller”附加到为 {controller} 传入的 URL 部分。因此,在那里工作的 URL 是:

/admin/AdminAdminUser/

试试这个。

routes.Add(new Route("admin/user/admin/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "AdminUser", action = "index", Id=""})
});

我假设 AdminUser Controller 是一个特殊情况,并且您没有其他以/user/开头的 Controller 。如果您这样做了,另一种方法是将 AdminUserController 重命名回 AdminController。然后:

routes.Add(new Route("admin/user/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""}),
Constraints = new RouteValueDictionary(new { controller = "Admin|Other|Other2"})
});

在这里,我使用约束来限制该特定路由适用于哪些 Controller 。

顺便说一句,我建议使用 MapRoute 扩展方法。它们使得路由注册变得更加简单。

关于c# - 我的路线没有启动,这应该有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2148783/

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