답변:
그 발견 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
.
공용 공유 속성 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)
웹 서버에서 AD와 통신하는 모든 것을 실행하려면 많은 변경과 인내가 필요합니다. 웹 서버에서 로컬 IIS / IIS Express를 실행할 때는 AppPool의 ID로 실행되므로 사이트를 방문한 사람을 사칭하도록 설정해야합니다.
ASP.NET MVC 응용 프로그램이 네트워크 내부의 웹 서버에서 실행될 때 활성 디렉토리에 현재 로그인 한 사용자를 가져 오는 방법 :
// 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;