BaseController(MVC 3)のリダイレクトに問題があります。サイトのポーランド語と英語($.cookie
プラグインで設定)の2つの言語バージョンがあります。が英語に設定されていて、ユーザーがポーランド語のURLに移動したい場合、適切なリダイレクトを行います。OnActionExecuting
しかし、メソッド内でリダイレクトを行うときはいつでも、メソッド内でExecuteCore
、何らかの理由で言語が切り替わることがわかります。行を参照してください(*)
。
さらに、そのシナリオでは、メソッドOnActionExecuting
とExecuteCore
メソッドの間で無限のリダイレクトが発生します。なんで ?
public class BaseController : Controller
{
protected override void ExecuteCore()
{
if (Request.Cookies["language"] != null)
{
if (Request.Cookies["language"].Value != "pl-PL" && Request.Cookies["language"].Value != "en-US")
Request.Cookies["language"].Value = "en-US";
}
else
Request.Cookies.Add(new HttpCookie("language", "en-US"));
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(Request.Cookies["language"].Value);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
base.ExecuteCore();
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
switch (filterContext.ActionDescriptor.ActionName)
{
case "Onas":
if (Request.Cookies["language"].Value == "en-US")
{
filterContext.Result = new RedirectResult("/About", true);
return;
}
break;
case "About":
if (Request.Cookies["language"].Value == "pl-PL")
{
(*) filterContext.Result = new RedirectResult("/Onas", true); // Request.Cookies["language"].Value will be en-US inside the ExecuteCore method - why ?
return;
}
break;
}
base.OnActionExecuting(filterContext);
}
}