フォームモデルでは、現在のログインユーザーを取得するために使用していました。
Page.CurrentUser
ASP.NET MVCのコントローラクラス内に現在のユーザーを取得する方法を教えてください。
コントローラ内からユーザを取得する必要がある場合は、ControllerのUser
プロパティを使用してください。あなたがビューからそれを必要とするならば、私はあなたが特に必要とするものをViewData
に入れるでしょう、あるいは私はそれがViewPage
の特性であると思うのであなたはただUserを呼ぶことができます。
User
が機能すること、つまりUser.Identity.Name
またはUser.IsInRole("Administrator")
が機能することがわかりました。
HttpContext.Current.User
を試してください。
System.Web.HttpContextとしてのPublic Shared Property Current()
System.Web.HttpContextのメンバー概要:
現在のHTTPリクエストに対するSystem.Web.HttpContextオブジェクトを取得または設定します。戻り値
現在のHTTPリクエストに対するSystem.Web.HttpContext
あなたはこのようにASP.NET MVC4でユーザーの名前を得ることができます:
System.Web.HttpContext.Current.User.Identity.Name
これは本当に古いことだと思いますが、私はASP.NET MVCを使い始めたばかりなので、次の2つの点に固執すると思いました。
Request.IsAuthenticated
は、ユーザーが認証されたかどうかを知らせます。Page.User.Identity
はあなたにログインしたユーザーのIDを与えます。私が使う:
Membership.GetUser().UserName
これがASP.NET MVCで機能するかどうかはわかりませんが、試してみる価値があります。
ログインユーザー名:System.Web.HttpContext.Current.User.Identity.Name
フィルタリング目的でASP.NET MVC 4に組み込まれている単純認証を使用して作成されたユーザーIDをコントローラーで参照するため(これは、データベースファーストおよびEntity Framework 5を使用してコードファーストバインディングを生成し、テーブルが構造化されている場合に役立ちます) userIDへの外部キーが使用されていることを
WebSecurity.CurrentUserId
usingステートメントを追加したら
using System.Web.Security;
ユーザー名:
User.Identity.Name
しかし、IDだけを取得する必要がある場合は、次のものを使用できます。
using Microsoft.AspNet.Identity;
そのため、ユーザーIDを直接取得できます。
User.Identity.GetUserId();
System.Security.Principal.WindowsIdentity.GetCurrent().Name
を使用してください。
これにより、現在ログインしているWindowsユーザーが取得されます。
このページはあなたが探しているものかもしれません:
MVC3でPage.User.Identity.Nameを使用
User.Identity.Name
が必要です。
ログインページの内側にいる場合、たとえばLoginUser_LoggedInイベントで、Current.User.Identity.Nameは空の値を返すので、yourLoginControlName.UserNameプロパティを使用する必要があります。
MembershipUser u = Membership.GetUser(LoginUser.UserName);
その価値があるために、ASP.NET MVC 3では、現在のリクエストに対してユーザーを返すUserを使用することができます。
次のコードを使用して、ASP.Net MVCで現在ログインしているユーザーを取得できます。
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
また
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
以下のコードを使用することができます。
Request.LogonUserIdentity.Name;
イントラネット上のActive Directoryで作業している場合は、以下のヒントがあります。
(Windows Server 2012)
Webサーバー上でADと対話するものを実行するには、たくさんの変更と忍耐力が必要です。ローカルIIS/IIS Expressと比較してWebサーバー上で実行する場合は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情報を取得するホスティング環境として機能するように、次のように「Active Directoryコンテキスト」に関連する呼び出しをすべてラップする必要があります。
using (HostingEnvironment.Impersonate()){ ... }
Web.configでもimpersonate
をtrueに設定する必要があります。
<system.web>
<identity impersonate="true" />
Web.configでWindows認証が必要です。
<authentication mode="Windows" />
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));
Asp.net Mvc ID 2では、現在のユーザー名を次の方法で取得できます。
var username = System.Web.HttpContext.Current.User.Identity.Name;
IISマネージャの[認証]で、以下を無効にします。1)匿名認証2)フォーム認証
次に、テストとサーバー配備の両方を処理するために、以下をコントローラに追加します。
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;