274

フォーム モデルでは、現在ログインしているユーザーを次の方法で取得していました。

Page.CurrentUser

ASP.NET MVC のコントローラー クラス内で現在のユーザーを取得するにはどうすればよいですか?

4

21 に答える 21

271

コントローラ内からユーザーを取得する必要がある場合はUser、Controllerのプロパティを使用します。ビューから必要な場合は、特に必要なものをに入力しますViewData。または、のプロパティだと思うので、Userに電話することもできますViewPage

于 2008-11-04T23:19:36.857 に答える
62

試してみてくださいHttpContext.Current.User

Public 共有プロパティ Current() System.Web.HttpContext System.Web.HttpContext
のメンバー として

概要:
現在の HTTP 要求の System.Web.HttpContext オブジェクトを取得または設定します。

戻り値:
現在の HTTP 要求の System.Web.HttpContext

于 2008-11-04T21:30:22.520 に答える
16

私が使う:

Membership.GetUser().UserName

これが ASP.NET MVC で機能するかどうかはわかりませんが、試してみる価値はあります:)

于 2008-11-04T21:29:28.497 に答える
11

ログインするユーザー名:System.Web.HttpContext.Current.User.Identity.Name

于 2010-09-08T12:50:12.053 に答える
10

ユーザー名:

User.Identity.Name

ただし、ID だけを取得する必要がある場合は、次を使用できます。

using Microsoft.AspNet.Identity;

したがって、ユーザー ID を直接取得できます。

User.Identity.GetUserId();
于 2017-01-12T13:44:53.410 に答える
9

ASP.NET MVC 4 に組み込まれた単純な認証を使用して作成されたユーザー ID をフィルター処理のためにコントローラーで参照するため (これは、データベースを最初に使用し、Entity Framework 5 を使用してコード ファースト バインディングを生成し、テーブルがそのように構造化されている場合に役立ちます)。 userID への外部キーが使用されている場合)、次を使用できます。

WebSecurity.CurrentUserId

usingステートメントを追加したら

using System.Web.Security;
于 2013-06-22T19:12:38.247 に答える
6

このページはあなたが探しているものかもしれません:
Using Page.User.Identity.Name in MVC3

あなただけが必要User.Identity.Nameです。

于 2011-11-13T08:51:33.567 に答える
5

を使用しSystem.Security.Principal.WindowsIdentity.GetCurrent().Nameます。

これにより、現在ログインしている Windows ユーザーが取得されます。

于 2015-08-17T18:04:02.767 に答える
4

ログインページ内にいる場合、たとえばLoginUser_LoggedInイベントでは、Current.User.Identity.Nameは空の値を返すため、yourLoginControlName.UserNameプロパティを使用する必要があります。

MembershipUser u = Membership.GetUser(LoginUser.UserName);
于 2011-11-10T13:44:24.513 に答える
4

価値があるのは、ASP.NET MVC 3 では、現在の要求に対してユーザーを返す User を使用することだけです。

于 2011-09-13T19:10:35.230 に答える
3
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
        ...
                   currentUser.IsInRole("Operator");
于 2011-04-26T13:00:09.497 に答える
2
var ticket = FormsAuthentication.Decrypt(
                    HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);

if (ticket.Expired)
{
    throw new InvalidOperationException("Ticket expired.");
}

IPrincipal user =  (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));
于 2015-06-24T07:47:06.033 に答える
2

イントラネット上の Active Directory で作業している場合は、次のヒントを参考にしてください。

(Windows サーバー 2012)

Web サーバーで AD と通信するものを実行するには、多くの変更と忍耐が必要です。Web サーバーとローカル IIS/IIS Express で実行する場合、AppPool の ID で実行されるため、サイトにアクセスした人を偽装するように設定する必要があります。

ASP.NET MVC アプリケーションがネットワーク内の Web サーバーで実行されている場合に、Active Directory で現在ログインしているユーザーを取得する方法:

// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
    var userContext = System.Web.HttpContext.Current.User.Identity;
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
                                                ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
    adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...

AD 情報を取得するためのホスティング環境として機能するように、「アクティブ ディレクトリ コンテキスト」に関連するすべての呼び出しを次のようにラップする必要があります。

using (HostingEnvironment.Impersonate()){ ... }

impersonateまた、web.config で true に設定する必要があります。

<system.web>
    <identity impersonate="true" />

web.config で Windows 認証を有効にする必要があります。

<authentication mode="Windows" />
于 2016-01-22T16:19:31.980 に答える
1

まだこれを読んでいる人がいる場合は、cshtml ファイルにアクセスするために、次の方法で使用しました。

<li>Hello @User.Identity.Name</li>
于 2020-10-24T14:56:53.777 に答える