Bir form modelinde, şu anda oturum açmış olan kullanıcıyı şu şekilde alırdım:
Page.CurrentUser
Geçerli kullanıcıyı ASP.NET MVC'de bir denetleyici sınıfı içinde nasıl edinebilirim?
Bir form modelinde, şu anda oturum açmış olan kullanıcıyı şu şekilde alırdım:
Page.CurrentUser
Geçerli kullanıcıyı ASP.NET MVC'de bir denetleyici sınıfı içinde nasıl edinebilirim?
Yanıtlar:
Kullanıcıyı denetleyiciden almanız gerekirse User
, Denetleyici özelliğini kullanın . Görünümden ihtiyacınız varsa, özellikle ihtiyacınız olan şeyleri dolduracaktım ViewData
, ya da sadece bir özelliği olduğunu düşündüğüm için Kullanıcı'yı arayabilirsiniz ViewPage
.
Bunu buldum User
olduğunu, eserlerini, User.Identity.Name
ya User.IsInRole("Administrator")
.
Imports System.Web
daha fazla ve birlikte ile hak HttpContext.Current.User.Identity.Name
doğrudan veya tam sözdizimi kullanarak nitelemek:System.Web.HttpContext.Current.User.Identity.Name
Deneyin HttpContext.Current.User
.
System.Web.HttpContext Olarak Ortak Paylaşılan Özellik Current ()
ÜyesiÖzet:
Geçerli HTTP isteği için System.Web.HttpContext nesnesini alır veya ayarlar.Dönen Değerler:
Geçerli HTTP isteği için System.Web.HttpContext
ASP.NET MVC4'te kullanıcının adını şöyle alabilirsiniz:
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
, bunun gibi mutlak bir çağrı yapmanızı öneririm System.Web.HttpContext.Current.User.Identity.Name
.
Kullanırım:
Membership.GetUser().UserName
Bunun ASP.NET MVC'de çalışacağından emin değilim, ama denemeye değer :)
Filtreleme amacıyla bir denetleyicide ASP.NET MVC 4'te yerleşik olan basit kimlik doğrulaması kullanılarak oluşturulan bir kullanıcı kimliğine başvurmak için (önce veritabanını ve ilk kod bağlamalarını oluşturmak için Entity Framework 5'i kullanıyorsanız ve tablolarınız userID için yabancı anahtar kullanıldıysa),
WebSecurity.CurrentUserId
using ifadesi ekledikten sonra
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
çalışır MVC 5
. Ancak bu, etki alanı adını kullanıcı adıyla alır. ie domain \ username
ASP.Net MVC'de oturum açmış olan kullanıcıyı almak için aşağıdaki kodu kullanabiliriz:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Ayrıca
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Kullanıcı Adı:
User.Identity.Name
Ancak yalnızca kimliği almanız gerekiyorsa şunları kullanabilirsiniz:
using Microsoft.AspNet.Identity;
Böylece, doğrudan Kullanıcı Kimliğini alabilirsiniz:
User.Identity.GetUserId();
Bu sayfa aradığınız şey olabilir:
MVC3'te Page.User.Identity.Name kullanma
Sadece ihtiyacın var User.Identity.Name
.
Kullanın System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Bu işlem, oturum açmış geçerli Windows kullanıcısını alır.
Aşağıdaki kodu kullanabilirsiniz:
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));
Bir intranette Active Directory'de çalışıyorsanız, işte bazı ipuçları:
(Windows Server 2012)
Bir web sunucusunda AD ile konuşan her şeyi çalıştırmak bir sürü değişiklik ve sabır gerektirir. Bir web sunucusunda yerel IIS / IIS Express'e karşı çalışırken AppPool'un kimliğinde çalıştığından, siteyi kimin isabet ettiğini taklit etmek için ayarlamanız gerekir.
ASP.NET MVC uygulamanız ağ içindeki bir web sunucusunda çalışırken geçerli oturum açmış kullanıcıyı etkin bir dizine alma:
// 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 bilgisini almak için barındırma ortamı görevi görmesi için, 'etkin dizin bağlamı' ile ilgili olan çağrıları aşağıda belirtmeniz gerekir:
using (HostingEnvironment.Impersonate()){ ... }
Ayrıca impersonate
web.config dosyasında true olarak ayarlamış olmanız gerekir :
<system.web>
<identity impersonate="true" />
Web.config dosyasında Windows kimlik doğrulamasının açık olması gerekir:
<authentication mode="Windows" />
Asp.net Mvc Identity 2'de, geçerli kullanıcı adını şu yolla alabilirsiniz:
var username = System.Web.HttpContext.Current.User.Identity.Name;
IIS Yöneticisi'nde Kimlik Doğrulama altında devre dışı bırakın: 1) Anonim Kimlik Doğrulama 2) Form Kimlik Doğrulaması
Ardından, sunucu dağıtımına karşı sınamayı gerçekleştirmek için denetleyicinize aşağıdakileri ekleyin:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;