gpt4 book ai didi

asp.net-mvc - 是否可以在不同的 AppDomain 中运行 ASP.NET MVC 路由?

转载 作者:行者123 更新时间:2023-12-04 07:10:26 24 4
gpt4 key购买 nike

我在为以下问题想出解决方案时遇到了问题。我有一个博客,最近从 Web 表单升级到 MVC。该博客在两个不同的域上提供瑞典语和英语版本,并且在 IIS 中的同一网站上运行。

问题是我想在这两个站点上使用特定于语言的 url,如下所示:

英语: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 将请求发送到其中一个。找不到任何有关如何以这种方式使用 AppDomains 的示例。

我完全偏离轨道了吗?或者对此有更好的解决方案吗?

最佳答案

ASP.Net 运行时为您管理 AppDomain,因此在您的代码中创建 AppDomain 可能不是一个好主意。

但是,如果可以的话,我建议创建多个 IIS 应用程序(一个用于 http://codeodyssey.com,一个用于 http://codeodyssey.se)。将两个应用程序指向磁盘上的同一目录。这将为您提供您正在寻找的两个 AppDomain。

然后,在您的 Application_Start 代码中,您可以检查域并相应地构建路由。

关于asp.net-mvc - 是否可以在不同的 AppDomain 中运行 ASP.NET MVC 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/455620/

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