gpt4 book ai didi

ASP.NET MVC twitter/myspace 风格路由

转载 作者:行者123 更新时间:2023-12-02 13:28:57 26 4
gpt4 key购买 nike

这是我长期潜伏后的第一篇文章 - 所以请保持温柔:-)

我有一个类似于 Twitter 的网站,人们可以注册并选择一个“友好的 URL”,所以在我的网站上他们会有类似的内容:

mydomain.com/benjones

我还有根级静态页面,例如:

mydomain.com/about

当然还有我的主页:

mydomain.com/

我是 ASP.NET MVC 2 的新手(事实上我今天才刚刚开始),我已经设置了以下路线来尝试实现上述目标。

    public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("images/{*pathInfo}");

routes.MapRoute("About", "about",
new { controller = "Common", action = "About" }
);

// User profile sits at root level so check for this before displaying the homepage
routes.MapRoute("UserProfile", "{url}",
new { controller = "User", action = "Profile", url = "" }
);

routes.MapRoute("Home", "",
new { controller = "Home", action = "Index", id = "" }
);
}

在大多数情况下,这工作正常,但是,我的主页没有被触发!本质上,当您浏览到 mydomain.com 时,它似乎会使用空的 {url} 参数触发用户配置文件路由,因此永远不会到达主页!关于如何显示主页有什么想法吗?

最佳答案

知道这个问题不久前被问过,但我只是想做同样的事情,找不到任何可以完全解决我问题的答案,所以我想我会为其他可能的人添加 2 美分将来也希望做同样的事情。

上述建议解决方案的问题(如 Astrofaes 的评论中所述)是您需要为程序集中的每个 Controller 创建静态路由。因此,最后我最终使用自定义路由约束来检查执行程序集中是否存在可以处理请求的 Controller 。如果存在则返回 false 匹配,以便请求将由另一个路由处理。

public class NotControllerConstraint : IRouteConstraint
{
private static readonly IEnumerable<Type> Controllers = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.BaseType == typeof(Controller));

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return Controllers.Where(c => c.Name == values["id"] + "Controller").Count() == 0;
}
}

然后可以按如下方式设置路由:

 routes.MapRoute("User", "{id}", new { controller = "User", action = "Index" }, new { notController = new NotControllerConstraint() });

routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

关于ASP.NET MVC twitter/myspace 风格路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071076/

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