私は解決策を見つけました...
私は web.config 設定を保持しました:
<authentication mode="Forms">
<forms loginUrl="~/LogOn" timeout="2880" />
</authentication>
コードプレックスの Web.Config
RouteConfig.cs 内
routes.MapRoute(
name: "LogOn",
url: "LogOn/{action}",
defaults: new { controller = "LogOn", action = "SelectLanguage" }
);
そして言語では、RouteConfig.cs のルート ループ
foreach (var l in Languages)
{
...
routes.MapRoute(
name: "LogOn" + l.Name.ToUpper(),
url: l.Description + "/logon/{action}",
defaults: new { controller = "LogOn", action = "Index", language = l.Description }
);
...
}
コードプレックスの routeconfig.cs
コントローラーベースに
public string URLReferLanguage
{
get
{
string toReturn = ConfigurationManager.AppSettings["DefaultLanguage"];
string language = string.Empty;
string[] tLanguages = ConfigurationManager.AppSettings["Languages"].Split(',');
string urlReferrer = HttpContext.Request.UrlReferrer.AbsolutePath;
if (urlReferrer != null)
{
if (urlReferrer.Length > 5)
{
language = urlReferrer.Substring(1, 5).ToLower();
if (tLanguages.Contains(language))
{
toReturn = language;
}
}
}
return toReturn;
}
}
コードプレックスの _Controller_Base
セキュリティ層のログオン コントローラで
public ActionResult SelectLanguage()
{
return Redirect(string.Format("/{0}{1}", base.URLReferLanguage, Request.Url.PathAndQuery));
}
/// <summary>
/// URL: /en-us/LogOn
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
string eMethod = eMethodBase + ".Index[GET]";
using (DataRepositories _dataContext = new DataRepositories())
{
base.InitView(
Resources.View_LogOn_PageTitle,
string.Empty,
specificCssCollection,
specificJSCollection,
dynamicJSCollection,
specificJqueryJSCollection,
jsVariables,
externalCSS,
Meta,
_dataContext,
false,
base.RequestLanguage,
false
);
}
string returnUrl = Request.QueryString["ReturnUrl"];
if (!string.IsNullOrEmpty(returnUrl))
{
ContentData.ReturnUrl = returnUrl;
}
return View(ContentData);
}
codeplex の LogOn コントローラー
そのため、ユーザーが標準の役割とメンバーシップ (私のプロバイダーは標準のものを継承) によって LoginForm にリダイレクトされると、コントローラーは UrlRefer を分析し、アドレス指定してリダイレクトする言語を追加します。