我在想出以下解决方案时遇到问题。我有一个最近从 Web 表单升级到 MVC 的博客。该博客在两个不同的域上以瑞典语和英语提供,并且在 IIS 中的同一个网站上运行。
问题是我想要两个网站上的语言特定网址,如下所示:
英文:http ://codeodyssey.com/archive/2009/1/15/code-odyssey-the-next-chapter
瑞典语:http ://codeodyssey.se/arkiv/2009/1/15/code-odyssey-nasta-kapitel
目前,我通过根据调用的域在每个请求上注册 RouteTable 来实现这一点。我的 Global.asax 看起来像这样(不是整个代码):
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
string archiveRoute = "archive";
if (Thread.CurrentThread.CurrentUICulture.ToString() == "sv-SE")
{
archiveRoute = "arkiv";
}
routes.MapRoute(
"BlogPost",
archiveRoute+"/{year}/{month}/{day}/{slug}",
new { controller = "Blog", action = "ArchiveBySlug" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Error", action = "ResourceNotFound" }
);
}
void Application_BeginRequest(object sender, EventArgs e)
{
//Check whcih domian the request is made for, and store the Culture
string currentCulture = HttpContext.Current.Request.Url.ToString().IndexOf("codeodyssey.se") != -1 ? "sv-SE" : "en-GB";
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(currentCulture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentCulture);
RouteTable.Routes.Clear();
RegisterRoutes(RouteTable.Routes);
Bootstrapper.ConfigureStructureMap();
ControllerBuilder.Current.SetControllerFactory(
new CodeOdyssey.Web.Controllers.StructureMapControllerFactory()
);
}
protected void Application_Start()
{
}
这目前有效,但我知道这不是一个很好的解决方案。启动此应用程序时,我收到“已添加项目。键入字典”错误,有时似乎不稳定。
我只想在 Application_Start 中设置我的路由,而不是像现在这样在每个请求上清除它们。问题是请求对象不存在,我无法知道我应该注册哪种语言特定的路由。
一直在阅读有关 AppDomain 的信息,但在网站上找不到很多有关如何使用它的示例。我一直在考虑给这样的东西加注星标:
protected void Application_Start()
{
AppDomain.CreateDomain("codeodyssey.se");
AppDomain.CreateDomain("codeodyssey.com");
}
然后在每个应用程序域中注册每个网站路由,并根据 url 将请求发送到其中一个。找不到任何关于如何以这种方式使用 AppDomain 的示例。
我完全偏离轨道了吗?或者有更好的解决方案吗?