1

MVC 3イントラネットアプリケーション(Windows認証)に取り組んでいます。コントローラアクションで現在ログインしているユーザーのユーザー名が必要です。多くのバリエーションを試しましたが、ユーザー名を取得できません。Environment.Usernameデバッグモードでうまく機能するように使用してみましたが、デプロイすると、ユーザー名ではなくプール名が提供されました。

コントローラのアクション。

  public ActionResult Index()
        {
            LoggedUser usr = new LoggedUser();
            var aa = usr.User;
        }

LoggedUser

public class LoggedUser : Controller
    {
        public LoggedUser()
        {

        }
    }

私はこの投稿をフォローしていましたが、それを機能させることができませんでしたASP.NETMVC3イントラネットアプリケーションでログインしたユーザー名を取得する

何か助けは?

4

3 に答える 3

2

現在ログインしているユーザー名を取得するにはUser.Identity.Name、アクション内でプロパティを使用できます。

public ActionResult Index()
{
    string usr = User.Identity.Name;
    ...
}

質問で示したコードが正しくありません。を定義し、アクションLoggedUser内でこのコントローラーをインスタンス化していますIndex。コントローラを手動でインスタンス化することは想定されていません。それがフレームワークの責任です。

于 2013-02-25T10:02:01.700 に答える
1

ユーザー名を必要とするコントローラーレベルの変数を使用する場合は、認証されたユーザーIDにアクセスできるOnActionExecutingイベントをオーバーライドできます。注意するために、user.identityのnullをチェックする必要がある場合があります。

    Obj myObj;
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        myObj = new Obj(User.Identity.Name);
        base.OnActionExecuting(filterContext);
    }
于 2017-04-02T16:04:40.080 に答える
0

全体の議論は、メソッド/関数へのアクセスにおいて、実際に何が許可の「状態」のように聞こえるかについてであり、実際には、オブジェクトのようなコントローラーに存在できるより大きな概念のように聞こえ、そのタイプの「状態概念」のクラスを作成します...それがモデル/ビュー/コントローラーに存在するかどうかに関するすべての議論は、パラメーター交換でID / Objectを使用して解決できますが、アクセスデータの必要性のため、コントローラーの仕事ではなく、dbmsの仕事であり、データモデルのメモリ構造のためのデータアクセスの構造化、「アイデア/接続/タスク」をモデル化するクラスの任意の形式/モデル/構造のクラスのジョブ。モデル/コントローラーに関するすべての議論は効率に関するものであり、すべての場合において効率はDBMSです。

于 2016-09-23T23:02:45.957 に答える