我有ASP.NET 4项目(不是MVC)。我需要根据用户输入语言创建url路由。
Project只有两种语言“he”和“en”。
用户可以进入该网站,如果他的文化被设置为除了他之外的任何东西,我想将他重新路由到website.com/en/,否则转到website.com/he /
Default.aspx应保持同一页面,该页面使用全球化功能根据用户在浏览器中的文化设置翻译值。
我该怎么做?除了在Global.asax中编写路由以及如何编写此路由之外,我该怎么做。
答案 0 :(得分:1)
这不应该很难。是的,Global.ascx是最佳起点。
首先绘制路线,
protected void RegisterRoutes(RouteCollection routes)
{
//Contact route for EN culture
routes.MapPageRoute(
"contactRouteEN",
"en/contact",
"~/Contact.aspx"
);
routes.MapPageRoute(
"contactRouteHE",
"he/contact",
"~/Contact.aspx"
);
}
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
这确定了路线。
您的描述听起来更像是全球化问题,而不是网址路由问题。问题的网址部分对用户来说是装饰性的,但不会在我的视图中攻击底层问题。 ASP.Net为全球化提供便利。例如,您可以使用LocalResources。为您的应用程序根级别的页面执行此操作(不嵌套在文件夹中) 右键单击该网站,然后选择“添加ASP.Net文件夹” 选择App_LocalResources。 右键单击App_LocalResources文件夹,然后选择Add Item 选择资源文件。
根据您计划定位的文化命名文件非常重要
您可以将第一个文件创建为Contact.aspx.resx作为默认资源文件(也许是英文?)
ASP.Net将尝试找到与资源文件匹配的最具体的文化,如果没有提供更具体的文件,将采用默认文件。
命名约定遵循PageName.aspx.languageID-cultureId.resx
你可以拥有Contact.aspx.he.resx
例如,在标签控件中,您可以像这样设置
<asp:Label ID="lbContactMessage" runat="server" Text="something" meta:resourcekey="yourmatchingkeyfromresourcefile"></asp:Label>
有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/c6zyy3s9.aspx
答案 1 :(得分:0)
好像你正在尝试做一些无意识的路由。
如果URL中的语言什么也没做,你需要它只出现在URL中,那么你要么用HTTP模块重写URL来删除它并添加回生成的html,或者只是将同一个站点映射到两个虚拟文件夹/ en和/他在IIS中,在/上创建一个简单的Default.aspx页面,根据用户文化重定向到适当的页面。