カスタム RootConstraint クラスの Session に到達できません。null に設定されています。検索しましたが、解決策が見つかりませんでした。
public class AdminRootConstraint : IRouteConstraint { public bool Match ( HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection ) { if ((string) values["controller"] == "Login") return true; return HttpContext.Current.Session != null && (bool)HttpContext.Current.Session["IsAuthorized"]; } }
編集
httpContext パラメータがイミディエイト ウィンドウでどのように表示されるかを次に示します。アイデアを出すかもしれません。
httpContext
{System.Web.HttpContextWrapper}
[System.Web.HttpContextWrapper]: {System.Web.HttpContextWrapper}
AllErrors: null
AllowAsyncDuringSyncStages: false
Application: {System.Web.HttpApplicationStateWrapper}
ApplicationInstance: {ASP.global_asax}
AsyncPreloadMode: None
Cache: {System.Web.Caching.Cache}
CurrentHandler: null
CurrentNotification: ResolveRequestCache
Error: null
Handler: null
IsCustomErrorEnabled: false
IsDebuggingEnabled: true
IsPostNotification: true
IsWebSocketRequest: false
IsWebSocketRequestUpgrading: false
Items: Count = 0x00000000
PageInstrumentation: {System.Web.Instrumentation.PageInstrumentationService}
PreviousHandler: null
Profile: null
Request: {System.Web.HttpRequestWrapper}
Response: {System.Web.HttpResponseWrapper}
Server: {System.Web.HttpServerUtilityWrapper}
Session: null
SkipAuthorization: false
ThreadAbortOnTimeout: true
Timestamp: {14.09.2013 16:52:53}
Trace: {System.Web.TraceContext}
User: {System.Security.Principal.WindowsPrincipal}
WebSocketNegotiatedProtocol: null
WebSocketRequestedProtocols: null
編集 2
RedirectToAction
同じエリアのアクションからメソッドを使用していますが、Match
トレース中にメソッドが 2 回実行されます。最初の実行では、routeDirection
パラメーターは に設定されSystem.Web.Routing.RouteDirection.UrlGeneration
、その時点でセッションは null ではありません。しかし、2 回目の実行が開始されると、routeDirection
パラメーターが に設定されSystem.Web.Routing.RouteDirection.IncomingRequest
、セッションは null になります。なんで?