回答:
コントローラー内からユーザーを取得する必要がある場合は、コントローラーのUser
プロパティを使用します。ビューから必要な場合は、具体的に必要なものをに入力しますViewData
。または、のプロパティだと思うので、単にUserを呼び出すこともできますViewPage
。
私はそれがUser
うまくいく、つまり、User.Identity.Name
またはUser.IsInRole("Administrator")
。
Imports System.Web
更なるとは、として資格をHttpContext.Current.User.Identity.Name
直接、または完全な構文を使用して資格:System.Web.HttpContext.Current.User.Identity.Name
お試しくださいHttpContext.Current.User
。
Public Shared Property Current()As System.Web.HttpContext System.Web.HttpContextの
メンバー概要:
現在のHTTP要求のSystem.Web.HttpContextオブジェクトを取得または設定します。戻り値:
現在のHTTPリクエストのSystem.Web.HttpContext
次のようにASP.NET MVC4でユーザーの名前を取得できます。
System.Web.HttpContext.Current.User.Identity.Name
'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found
ような絶対的な呼び出しを行うことをお勧めしSystem.Web.HttpContext.Current.User.Identity.Name
ます。
私が使う:
Membership.GetUser().UserName
これがASP.NET MVCで機能するかどうかはわかりませんが、試してみる価値はあります:)
フィルター処理の目的で、コントローラーのASP.NET MVC 4に組み込まれた単純な認証を使用して作成されたユーザーIDを参照するには(最初にデータベースとEntity Framework 5を使用してコードファーストバインディングを生成し、テーブルが構造化されている場合に役立ちます) userIDへの外部キーが使用されていること)、使用できます
WebSecurity.CurrentUserId
usingステートメントを追加したら
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
機能しMVC 5
ます。しかし、それはユーザー名と共にドメイン名を引き上げます。つまり、domain \ username
ユーザー名:
User.Identity.Name
ただし、IDのみを取得する必要がある場合は、以下を使用できます。
using Microsoft.AspNet.Identity;
したがって、ユーザーIDを直接取得できます。
User.Identity.GetUserId();
このページはあなたが探しているものかもしれません:
MVC3でのPage.User.Identity.Nameの使用
あなただけが必要User.Identity.Name
です。
使用する System.Security.Principal.WindowsIdentity.GetCurrent().Name
ます。
これにより、現在ログインしているWindowsユーザーが取得されます。
次のコードを使用できます。
Request.LogonUserIdentity.Name;
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
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));
イントラネット上の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()){ ... }
またimpersonate
、web.configでtrueに設定しておく必要があります。
<system.web>
<identity impersonate="true" />
web.configでWindows認証をオンにする必要があります。
<authentication mode="Windows" />
Asp.net Mvc Identity 2では、次の方法で現在のユーザー名を取得できます。
var username = System.Web.HttpContext.Current.User.Identity.Name;