Trong mô hình biểu mẫu, tôi đã sử dụng để có được người dùng đăng nhập hiện tại bằng cách:
Page.CurrentUser
Làm cách nào để có được người dùng hiện tại bên trong một lớp trình điều khiển trong ASP.NET MVC?
Trong mô hình biểu mẫu, tôi đã sử dụng để có được người dùng đăng nhập hiện tại bằng cách:
Page.CurrentUser
Làm cách nào để có được người dùng hiện tại bên trong một lớp trình điều khiển trong ASP.NET MVC?
Câu trả lời:
Nếu bạn cần lấy người dùng từ bên trong bộ điều khiển, hãy sử dụng thuộc User
tính của Bộ điều khiển. Nếu bạn cần nó từ chế độ xem, tôi sẽ điền vào những gì bạn đặc biệt cần trong ViewData
hoặc bạn chỉ có thể gọi Người dùng vì tôi nghĩ đó là tài sản của ViewPage
.
Tôi thấy rằng User
hoạt động, đó là, User.Identity.Name
hoặc User.IsInRole("Administrator")
.
Imports System.Web
và đủ điều kiện hơn với HttpContext.Current.User.Identity.Name
, hoặc trực tiếp đủ điều kiện bằng cách sử dụng cú pháp đầy đủ:System.Web.HttpContext.Current.User.Identity.Name
Hãy thử HttpContext.Current.User
.
Tài sản được chia sẻ công khai hiện tại () Là System.Web.HttpContext
Thành viên của System.Web.HttpContextTóm tắt:
Nhận hoặc đặt đối tượng System.Web.HttpContext cho yêu cầu HTTP hiện tại.Giá trị trả về:
System.Web.HttpContext cho yêu cầu HTTP hiện tại
Bạn có thể lấy tên của người dùng trong ASP.NET MVC4 như thế này:
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
, tôi khuyên bạn nên thực hiện một cuộc gọi tuyệt đối như thế này System.Web.HttpContext.Current.User.Identity.Name
.
Tôi sử dụng:
Membership.GetUser().UserName
Tôi không chắc điều này sẽ hoạt động trong ASP.NET MVC, nhưng nó đáng để thử :)
Để tham chiếu ID người dùng được tạo bằng xác thực đơn giản được tích hợp trong ASP.NET MVC 4 trong bộ điều khiển cho mục đích lọc (rất hữu ích nếu bạn đang sử dụng cơ sở dữ liệu trước và Entity Framework 5 để tạo các liên kết đầu tiên mã và các bảng của bạn được cấu trúc như vậy rằng một khóa ngoại cho userID được sử dụng), bạn có thể sử dụng
WebSecurity.CurrentUserId
một khi bạn thêm một câu lệnh sử dụng
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
hoạt động trong MVC 5
. Tuy nhiên, điều đó kéo lên tên miền với tên người dùng. tức là tên miền \ tên người dùng
Chúng tôi có thể sử dụng mã sau đây để có được Người dùng đã đăng nhập hiện tại trong ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Cũng thế
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Tên người dùng với:
User.Identity.Name
Nhưng nếu bạn chỉ cần lấy ID, bạn có thể sử dụng:
using Microsoft.AspNet.Identity;
Vì vậy, bạn có thể lấy trực tiếp ID người dùng:
User.Identity.GetUserId();
Trang này có thể là những gì bạn đang tìm kiếm:
Sử dụng Page.User.Identity.Name trong MVC3
Bạn chỉ cần User.Identity.Name
.
Sử dụng System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Điều này sẽ có được người dùng Windows đăng nhập hiện tại.
Nếu bạn đang ở trong trang đăng nhập của mình, ví dụ như trong sự kiện LoginUser_LoggedIn, Current.User.Identity.Name sẽ trả về một giá trị trống, do đó bạn phải sử dụng thuộc tínhLoginControlName.UserName của bạn.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Bạn có thể sử dụng mã sau đây:
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));
Nếu bạn tình cờ làm việc trong Active Directory trên mạng nội bộ, đây là một số mẹo:
(Máy chủ Windows 2012)
Chạy bất cứ điều gì nói chuyện với AD trên máy chủ web đòi hỏi một loạt các thay đổi và kiên nhẫn. Vì khi chạy trên máy chủ web so với IIS / IIS Express cục bộ, nó chạy trong danh tính của AppPool, do đó, bạn phải thiết lập nó để mạo danh bất kỳ ai truy cập trang web.
Cách nhận người dùng đăng nhập hiện tại trong một thư mục hoạt động khi ứng dụng ASP.NET MVC của bạn đang chạy trên máy chủ web trong mạng:
// 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...
Bạn phải bọc mọi cuộc gọi phải thực hiện với 'bối cảnh thư mục hoạt động' trong phần sau để nó hoạt động như môi trường lưu trữ để lấy thông tin quảng cáo:
using (HostingEnvironment.Impersonate()){ ... }
Bạn cũng phải impersonate
đặt thành true trong web.config:
<system.web>
<identity impersonate="true" />
Bạn phải có xác thực Windows trên web.config:
<authentication mode="Windows" />
Trong Asp.net Mvc Identity 2, Bạn có thể lấy tên người dùng hiện tại bằng cách:
var username = System.Web.HttpContext.Current.User.Identity.Name;
Trong Trình quản lý IIS, bên dưới Xác thực, tắt: 1) Xác thực ẩn danh 2) Xác thực mẫu
Sau đó thêm phần sau vào bộ điều khiển của bạn, để xử lý kiểm tra so với triển khai máy chủ:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;