在C#中将查询字符串参数附加到URL的最佳策略

时间:2015-04-13 08:15:00

标签: c# asp.net localization query-string global-asax

我有一个ASP.NET C#网站,通过Localize标签和resx文件提供多种语言(英语,法语等)的内容。

有关用户语言的信息当前存储在Session对象中,并且在查询字符串中没有任何内容可视化。 无论如何,我意识到这种结构阻止搜索引擎引用其他语言的页面而不是英语(默认语言)。实际上,不同语言的页面之间没有链接区别。

为了克服这个问题,我考虑了附加查询字符串参数(即:“lang = fr-FR”)来设置页面本地化状态的可能性。此参数应自动​​出现在网站的每个页面中。这样就可以区分链接,搜索引擎可以“查看”所有可用语言的页面。

我试图在项目中添加global.asax并处理Application_BeginRequest事件。我没有得到任何错误,但参数根本没有添加到我的页面。这是我的代码的基本核心:

  protected void Application_BeginRequest(object sender, EventArgs e)
    {
    Context.RewritePath("news.aspx?lang=FR",true); 
    }

当然这只是一种测试重写的方法,而不是生产代码;我希望在浏览器上将所有页面(即:index.aspx)重命名为“news.aspx?lang = FR”。这唉不会发生;页面的URL没有任何变化(甚至在news.aspx中也没有。)

我确认正确触发了global.asax的Application_BeginRequest事件。

您是否了解此问题的解决方案,或者您是否可以建议在我的方案中在查询字符串中添加参数的更好策略?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为RewritePath对用户不可见。相反,您应该使用System.Net.WebClient.QueryString.Add(partBeforeEquals, partAfterEquals),例如var wC = new WebClient; wC.QueryString.Add("lang","fr");