2017-12-20 4 views
0

私はC#からVBに変換したMVCプロジェクトがあり、問題があります。このプロジェクトには、ログインしたユーザー名を取得しようとするControllerBaseクラスの拡張メソッドIsSysAdmin()があります。 WebサイトはWindows認証を使用するように設計されており、ログインレベルのユーザーのみがサイトへのアクセスを許可するエントリ(deny users = "?")を含む、ルートレベルweb.configの適切なエントリを有効にします。 IsSysAdmin()関数は、サイトの共有レイアウトビューでRazor参照によって呼び出されます。ここでControllerContext.HttpContext.Userが空です

は、機能のためのVBコードです:ここでは

<Extension()> 
Public Function IsSysAdmin(ByVal controller As ControllerBase) As Boolean 
    Dim bIsSysAdmin As Boolean = False 

    Dim loggedInUser = controller.ControllerContext.HttpContext.User.Identity.Name 

---- Other code 

    Return bIsSysAdmin 

End Function 

は、C#のコードです:

public static bool IsSysAdmin(this ControllerBase controller) 
{   
    bool bIsSysAdmin = false; 

    string loggedInUser = controller.ControllerContext.HttpContext.User.Identity.Name; 

---- Other code 

    return bIsSysAdmin; 
} 

C#バージョンは何の問題もありません。 loggedInUser変数は、実際にログインしているユーザー名を取得します。しかし、VB版では、loggedInUserは空白です。

明らかに私はここに何かを見逃していますが、私は何がわかりません。

+0

を有効にするには値?そうであれば、問題は拡張メソッド内にはないので、質問をより簡潔に質問することができます – LordWilmore

+0

そして、要素またはIISExpress設定でweb.configの匿名アクセスを無効にしましたか? – Fran

+0

はい、VS Debuggerを使用してcontroller.ControllerContext.HttpContext.User.Identity.Nameをチェックしました。 C#バージョンでは値を持ちますが、VBバージョンでは値がありません。 – Roger

答えて

0

Visual StudioのIISExpress設定には、既定で匿名認証がオンになっています。

プロジェクトのプロパティでオフにする必要があります。

  1. ソリューションエクスプローラでプロジェクトを選択します。
  2. クリックしてF4
  3. セット匿名認証の設定Windows認証
  4. 無効
  5. に私はあなたが `controller.ControllerContext.HttpContext.User.Identity.Name`が実際に含まれていないことをチェックしました仮定