2

我正在一个几乎完整的网站上工作。网站已在 ASP.Net、C# Framework 4.0 中开发。

我想为 URL 路由/重写添加一个功能,以使我的 URL 更加用户友好。我在网上找到了很多例子,但大多数例子都像http://www.example.com/phonehttp://www.example.com/computer

在我的情况下,我的页面依赖于多个查询字符串,例如 PageID、Language、ArticleID。

如何将下面的示例 URL 转换为一个,如下所示

http://webd:8080/ArticleDetails.aspx?Language=en-US&PageID=19&ArticleID=18 应该是 http://webd:8080/Article/Article-title-should-appear-here.aspx

http://webd:8080/Archive.aspx?PageId=7&Language=en-US 应该是 http://webd:8080/Archive

http://webd:8080/Archive.aspx?PageId=7&Language=en-USx 应该是 http://webd:8080/الذاتية/وسوف-تذهب-المادة-الرابعة-العنوان-هنا.aspx

是的,这是一个多语言网站,现在有英语和阿拉伯语版本,以后我们还需要添加西班牙语和其他语言。

我在网上看到的例子很少,但我希望有人能指点我一个完整的例子,如果可能的话,该网站的阿拉伯语版本也有同样的例子。

我应该能够以某种方式传递 Language=en-US PageID=19 ArticleID=18 并创建用户朋友网址。我希望有一个完整的例子让我有一个开始。

4

2 回答 2

1

过去,我使用了一个名为UrlRewriter.NET的开源 URL 重写组件,它应该可以帮助您创建所需的 URL。

但是我没有测试过这个组件来显示阿拉伯语。

如果您打算使用 UrlRewriter,这些帖子应该可以帮助您入门:http: //www.blogiversity.org/blogs/blogdayafternoon/archive/2008/12/18/url-rewriting-using-intelligencia-urlrewriter.aspx

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

于 2012-04-12T13:35:15.223 回答
0

实际发生的是处理 Application_BeginRequest 路由以重写 url。将 Global.asax 添加到您的项目(全局应用程序类) - 该类中有一些预定义的方法。使用 Application_BeginRequest 使用 Context.RewritePath 重写您的 url。

例如基于数据表:

            DataTable paths = BusinessLogic.Article.Path_List();
            for (int i = 0; i < paths.Rows.Count; i++)
            {
                if (String.Compare(Request.Url.AbsolutePath.ToString(), paths.Rows[i]["ART_Path"].ToString(), true) == 0)
                {
                    BusinessLogic.ArticleTypes aType = (BusinessLogic.ArticleTypes)Convert.ToInt32(paths.Rows[i]["ART_Type"]);
                    Context.RewritePath("/article.aspx?type=" + aType.ToString() + "&id=" + paths.Rows[i]["ART_ID"].ToString());
                    break;
                }
            }

问题示例:

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        // Request.Url.AbsolutePath returns your path with preceding / -- example /default.aspx


    // you do not want to hardcode this, but read it from a config file or database, but for the example it'll suffice
    Dictionary<string,string> urls = new Dictionary<string,string>();
    urls.Add("/Article/Article-title-should-appear-here", "/ArticleDetails.aspx?Language=en-US&PageID=19&ArticleID=18");
    urls.Add("/Archive", "/Archive.aspx?PageId=7&Language=en-US");
    urls.Add("/الذاتية/وسوف-تذهب-المادة-الرابعة-العنوان-هنا", "/Archive.aspx?PageId=7&Language=en-USx");
    foreach (KeyValuePair<string, string> kvp in urls)
    {
        if (String.Compare(Request.Url.AbsolutePath, kvp.Key, true) == 0 || String.Compare(Request.Url.AbsolutePath, kvp.Key + ".aspx", true) == 0)
        {
            Context.RewritePath(kvp.Value);
            break;
        }
    }
}
于 2012-04-12T14:07:02.240 回答