gpt4 book ai didi

c# - asp.net 网络表单中的动态路由

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:51 24 4
gpt4 key购买 nike

我们可以将动态路由添加到 global.asax 文件吗

假设如果我有同一个页面的多个路由

虽然我的页面实际 URL 类似于 http://website.com/en/about-us

我现在的问题是:有没有一种方法可以在 global.asax 文件中动态定义这些路由,以便读取用户输入的 URL,例如 http://website.com/about 然后将其与数据库表进行比较并将其重定向到正确的页面 http://website.com/en/about-us?

考虑到以下表结构:

Id  URL_Name    URL                                 Actual_URL                              Page_Handler
1 Home http://website.com/ http://website.com/ Default.aspx
2 About Us http://website.com/about http://website.com/en/about-us About.aspx
3 About Us http://website.com/about-us http://website.com/en/about-us About.aspx
4 About Us http://website.com/en/about http://website.com/en/about-us About.aspx
5 Contact http://website.com/contact http://website.com/en/contact-us Contact.aspx
6 Contact http://website.com/en/contact http://website.com/en/contact-us Contact.aspx

现在我必须在 global.asax 中手动配置每个路由:

        if(HttpContext.Current.Request.Url.ToString().ToLower().Equals("http://website.com/about")
{
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.Redirect("http://website.com/en/about-us");
}


if(HttpContext.Current.Request.Url.ToString().ToLower().Equals("http://website.com/en/about")
{
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.Redirect("http://website.com/en/about-us");
}

非常感谢指向一个好的示例或解决方案的指针。

最佳答案

我发现 global.asax 中的路由非常适合静态资源,特别是如果您想要一个用于 SEO 的漂亮、性感的无扩展 URL。

不过,对于动态页面/URL,如果它不匹配任何静态路由,我倾向于使用一个 catch all 路由来处理请求。

例如

    // ignore
routes.Add(new System.Web.Routing.Route("{resource}.axd/{*pathInfo}", new System.Web.Routing.StopRoutingHandler()));

// sexy static routes
routes.MapPageRoute("some-page", "some-sexy-url", "~/some/rubbish/path/page.aspx", true);

// catch all route
routes.MapPageRoute(
"All Pages",
"{*RequestedPage}",
"~/AssemblerPage.aspx",
true,
new System.Web.Routing.RouteValueDictionary { { "RequestedPage", "home" } }
);

因此,当请求到来时,它会依次检查每个静态路由并执行指定的页面。如果未找到匹配项,它会掉落到 catch all,然后 AssemblerPage.aspx 处理请求。这个 AssemblerPage 将分析请求的 URL 并重定向、重写路径或在页面上粘贴一些控件以进行呈现 - 基本上,它可以做任何你想让它做的事情。

在您的情况下,我会让 AssemblerPage 检查数据库并将请求的 URL 与您表中的 URL 进行比较。然后简单地重定向或重写路径。

关于c# - asp.net 网络表单中的动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056838/

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