我找到了解決辦法...
我一直在web.config中設置:
<authentication mode="Forms">
<forms loginUrl="~/LogOn" timeout="2880" />
</authentication>
Web.Config in codeplex
在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 }
);
...
}
The routeconfig.cs in codeplex
在控制器基
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 in codeplex
在登錄控制器在安全層
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);
}
The LogOn controller in codeplex
因此,當用戶通過標準的作用和成員(我的供應商繼承標準之一)重定向到LoginForm的,控制器分析UrlRefer和添加的語言來處理,並重定向到它。