1

環境:

Windows認証を使用するように構成された内部Asp.Net Webアプリケーションがあります。この認証の側面の一部として、基本的に HttpContext.Current.Identity.Name を取得し、HttpContext.Items コレクションにドロップされる UserInfo オブジェクトを返す HttpModule があります。

これを MVC3 経由で移行すると、ベース コントローラーと OnActionExecuting があり、コレクションにこの UserInfo アイテムがまったく表示されません。どんな洞察も素晴らしいでしょう。これが私のセットアップです:

ベースコントローラー:

protected override void OnActionExecuting(ActionExecutingContext ctx)
        {
            if (ctx.HttpContext.Items["UserInfo"] != null)
            {
                UserInfo currentUser = (UserInfo)ctx.HttpContext.Items["UserInfo"];
                dynamic viewBag = ctx.Controller.ViewBag;
                viewBag.CurrentUser = currentUser;
            }
            else
            {
                // Unauthorized do something
            }            

            base.OnActionExecuting(ctx);
        }

web.config:

<system.web>
    <httpModules>
      <add type="WFS.SIG.Client.Security.Authentication.WindowsAuthentication, WFS.SIG.Client.Security" name="AuthenticationModule"/>
    </httpModules>
</system.web>....

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="AuthenticationModule" type="WFS.SIG.Client.Security.Authentication.WindowsAuthentication, WFS.SIG.Client.Security" />
    </modules>
</system.webServer>
4

1 に答える 1

0

あなたのコードは次のようになるはずです:

protected override void OnActionExecuting(ActionExecutingContext ctx) 
{ 
    if (ctx.HttpContext.Items["UserInfo"] != null) 
    { 
        UserInfo currentUser = (UserInfo)ctx.HttpContext.Items["UserInfo"]; 
        ViewBag.CurrentUser = currentUser; 
    } 
    else 
    { 
        // Unauthorized do something 
    }             
    base.OnActionExecuting(ctx); 
} 

HttpContext へのアクセスは、次のように機能するはずです。ただし、ViewBag には直接アクセスできます。

認証モジュールが実際に呼び出され、オブジェクトを HttpContext に格納するかどうかを確認できますか? ブレークポイントを設定できますか?

于 2012-04-30T20:49:57.497 に答える