gpt4 book ai didi

ASP.NET MVC 包罗万象的路由

转载 作者:行者123 更新时间:2023-12-04 14:18:15 25 4
gpt4 key购买 nike

我已经在 StackOverflow 上阅读了一些关于此的主题,但无法让它工作。我在 Global.asax 的 RegisterRoutes 末尾有这个。

routes.MapRoute(
"Profile",
"{*url}",
new { controller = "Profile", action = "Index" }
);

基本上我想要实现的是让 mydomain.com/Username 指向我的成员(member)个人资料页面。我必须如何设置我的 Controller 和 RegisterRoutes 才能使其正常工作?

目前 mydomain.com/somethingthatisnotacontrollername 收到 404 错误。

最佳答案

适用于您的情况但不推荐的解决方案

您的应用程序中有一组预定义的 Controller (通常少于 10 个),因此您可以对 Controller 名称进行限制,然后将其他所有内容路由到用户配置文件:

routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "Home|Admin|Reports|..." }
);
routes.MapRoute(
"Profile",
"{username}/{action}",
new { controller = "Profile", action = "Details" }
);

但如果某些用户名与您的 Controller 名称相同,这将不起作用。基于经验端的经验数据,这是一个很小的可能性,但不是 0% 的机会。当用户名与某个 Controller 相同时,它自动意味着它将由第一个路由处理,因为约束不会使其失败。

推荐方案

最好的方法是将 URL 请求改为:
www.mydomain.com/profile/username

为什么我推荐它这样?因为这将使它变得更加简单和干净,并且允许有几个不同的个人资料页面:
  • 详情www.mydomain.com/profile/username
  • 设置 www.mydomain.com/profile/username/settings
  • 留言 www.mydomain.com/profile/username/messages

  • 在这种情况下的路由定义将是这样的:
    routes.MapRoute(
    "Profile",
    "Profile/{username}/{action}",
    new { controller = "Profile", action = "Details" }
    );
    routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    关于ASP.NET MVC 包罗万象的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6838389/

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