Dalam model formulir, saya biasa mendapatkan pengguna login saat ini dengan:
Page.CurrentUser
Bagaimana cara mendapatkan pengguna saat ini di dalam kelas kontroler di ASP.NET MVC?
Dalam model formulir, saya biasa mendapatkan pengguna login saat ini dengan:
Page.CurrentUser
Bagaimana cara mendapatkan pengguna saat ini di dalam kelas kontroler di ASP.NET MVC?
Jawaban:
Jika Anda perlu mendapatkan pengguna dari dalam pengontrol, gunakan User
properti Pengontrol. Jika Anda memerlukannya dari tampilan, saya akan mengisi apa yang Anda butuhkan secara khusus di ViewData
, atau Anda bisa memanggil Pengguna karena saya pikir itu adalah milik ViewPage
.
Saya menemukan bahwa itu User
berfungsi, yaitu, User.Identity.Name
atau User.IsInRole("Administrator")
.
Imports System.Web
dan lebih lanjut memenuhi syarat dengan HttpContext.Current.User.Identity.Name
, atau langsung memenuhi syarat menggunakan sintaks lengkap:System.Web.HttpContext.Current.User.Identity.Name
Coba HttpContext.Current.User
.
Properti Berbagi Umum Saat Ini () Sebagai System.Web.HttpContext
Anggota System.Web.HttpContextRingkasan:
Mendapat atau menetapkan objek System.Web.HttpContext untuk permintaan HTTP saat ini.Nilai Pengembalian:
System.Web.HttpContext untuk permintaan HTTP saat ini
Anda bisa mendapatkan nama pengguna di ASP.NET MVC4 seperti ini:
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
, saya sarankan melakukan panggilan absolut seperti ini System.Web.HttpContext.Current.User.Identity.Name
,.
Saya menggunakan:
Membership.GetUser().UserName
Saya tidak yakin ini akan bekerja di ASP.NET MVC, tetapi patut dicoba :)
Untuk referensi ID pengguna yang dibuat menggunakan otentikasi sederhana yang dibangun ke dalam ASP.NET MVC 4 di controller untuk keperluan penyaringan (yang berguna jika Anda menggunakan database pertama dan Kerangka Entity 5 untuk menghasilkan binding pertama-kode dan tabel Anda terstruktur sehingga bahwa kunci asing ke ID pengguna digunakan), Anda dapat menggunakan
WebSecurity.CurrentUserId
setelah Anda menambahkan pernyataan menggunakan
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
bekerja di MVC 5
. Namun itu menarik nama domain dengan nama pengguna. yaitu domain \ username
Kita dapat menggunakan kode berikut untuk mendapatkan Pengguna yang login saat ini di ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Juga
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
UserName dengan:
User.Identity.Name
Tetapi jika Anda hanya perlu mendapatkan ID, Anda dapat menggunakan:
using Microsoft.AspNet.Identity;
Jadi, Anda bisa mendapatkan ID Pengguna secara langsung:
User.Identity.GetUserId();
Halaman ini bisa menjadi apa yang Anda cari:
Menggunakan Page.User.Identity.Name di MVC3
Anda hanya perlu User.Identity.Name
.
Menggunakan System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Ini akan mendapatkan pengguna Windows login saat ini.
Jika Anda berada di dalam halaman login Anda, dalam acara LoginUser_LoggedIn misalnya, Current.User.Identity.Name akan mengembalikan nilai kosong, jadi Anda harus menggunakan propertiLoginControlName.UserName Anda.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Anda dapat menggunakan kode berikut:
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));
Jika Anda bekerja di Active Directory pada intranet, berikut adalah beberapa tips:
(Windows Server 2012)
Menjalankan apa pun yang berbicara dengan AD di server web membutuhkan banyak perubahan dan kesabaran. Karena ketika berjalan di server web vs IIS / IIS Express lokal itu berjalan di identitas AppPool, Anda harus mengaturnya untuk meniru siapa pun yang mengunjungi situs.
Cara mendapatkan pengguna login saat ini di direktori aktif ketika aplikasi ASP.NET MVC Anda berjalan di server web di dalam jaringan:
// 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...
Anda harus menutup semua panggilan yang berkaitan dengan 'konteks direktori aktif' di bawah ini sehingga bertindak sebagai lingkungan hosting untuk mendapatkan informasi AD:
using (HostingEnvironment.Impersonate()){ ... }
Anda juga harus impersonate
mengeset true di web.config Anda:
<system.web>
<identity impersonate="true" />
Anda harus mengaktifkan otentikasi Windows di web.config:
<authentication mode="Windows" />
Di Asp.net Mvc Identity 2, Anda bisa mendapatkan nama pengguna saat ini dengan:
var username = System.Web.HttpContext.Current.User.Identity.Name;
Di Manajer IIS, di bawah Otentikasi, nonaktifkan: 1) Otentikasi Anonim 2) Otentikasi Formulir
Kemudian tambahkan berikut ini ke controller Anda, untuk menangani pengujian versus penyebaran server:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;