2

HTTPS と HTTP に問題があります。私のフィルター属性がキャッシュされているようです。ログインすると、httpページをhttpsに自動的に送信しないはずです。その後、ログアウトすると https のままで問題ありませんが、http 以外のページに手動で移動しようとすると、ログインしているにもかかわらず、再び https ページにリダイレクトされます。ロギング情報がそれを示しているため、RequireSecure は常に true です。は。FilterAttributes はキャッシュされますか?もしそうなら、どうすればこれを修正できますか?

public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
    {
        protected static readonly NLogLogger Logger = new NLogLogger();

        public bool Ignore = false;
        public bool RequireSecure = false;

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
            {
                Logger.Info("Require HTTPS User Authenticated");

                RequireSecure = true;
            }

            if (filterContext.RequestContext.HttpContext.Request.IsLocal)
                RequireSecure = false;

            if (RequireSecure)
            {
                Logger.Info("Require HTTPS");

                base.OnAuthorization(filterContext);
            }
        }
    }
}
4

1 に答える 1

2

あなたが経験しているのは正しい行動です。詳細は次の場所にあります。

短い抜粋:

...ASP.NET MVC 3 では、フィルターはより積極的にキャッシュされます。したがって、インスタンスの状態を不適切に保存するカスタム アクション フィルターは壊れている可能性があります。

filter attributeto: Request スコープにとって重要なデータを保存することをお勧めします。

filterContext.HttpContext.Items

そしてセッションスコープとして(あなたの場合のように):

filterContext.HttpContext.Session

filterContext.HttpContext.Profile

于 2012-12-01T06:38:52.520 に答える