1

BaseController(MVC 3)のリダイレクトに問題があります。サイトのポーランド語と英語($.cookieプラグインで設定)の2つの言語バージョンがあります。が英語に設定されていて、ユーザーがポーランド語のURLに移動したい場合、適切なリダイレクトを行います。OnActionExecutingしかし、メソッド内でリダイレクトを行うときはいつでも、メソッド内でExecuteCore、何らかの理由で言語が切り替わることがわかります。行を参照してください(*)

さらに、そのシナリオでは、メソッドOnActionExecutingExecuteCoreメソッドの間で無限のリダイレクトが発生します。なんで ?

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);
    }
}
4

1 に答える 1

0

Cookie の Path プロパティを確認してください。/OnasURL に en-US を指定し、 url に pl-PL を指定すると、無限のリダイレクトを取得できます/About

jQueryプラグインでグローバルCookieを設定してください{ path: '/' }

于 2012-10-27T19:30:04.317 に答える