سؤال

في نموذج النماذج، اعتدت الحصول على المستخدم الحالي الذي قام بتسجيل الدخول عن طريق:

Page.CurrentUser

كيف يمكنني الحصول على المستخدم الحالي داخل فئة وحدة التحكم في ASP.NET MVC؟

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة للحصول على المستخدم من خلال وحدة تحكم، استخدام الخاصية User من المراقب المالي. إذا كنت في حاجة إليها من وجهة النظر، وأود أن ملء ما تحتاجه تحديدا في ViewData، أو هل يمكن أن مجرد دعوة العضو لأنني أعتقد أنه من خاصية ViewPage.

نصائح أخرى

ولقد وجدت أن يعمل User، وهذا هو، User.Identity.Name أو User.IsInRole("Administrator").

وحاول HttpContext.Current.User.

<اقتباس فقرة>   

والمشتركة العامة الملكية الحالي () كما   System.Web.HttpContext
      عضو System.Web.HttpContext

     

وملخص:
  يحصل أو تعيين الكائن System.Web.HttpContext لطلب HTTP الحالي.

     

والقيم العودة:
  وSystem.Web.HttpContext للتيار   طلب HTTP

ويمكنك الحصول على اسم المستخدم في ASP.NET MVC4 مثل هذا:

System.Web.HttpContext.Current.User.Identity.Name

أدرك أن هذا أمر قديم حقًا، لكنني بدأت للتو في استخدام ASP.NET MVC، لذلك فكرت في أن أضع سنتي في:

  • Request.IsAuthenticated يخبرك إذا تمت مصادقة المستخدم.
  • Page.User.Identity يمنحك هوية المستخدم الذي قام بتسجيل الدخول.

وأنا استخدم:

Membership.GetUser().UserName

وأنا لست متأكدا من هذا العمل في ASP.NET MVC، ولكن الامر يستحق رصاصة واحدة:)

والحصول على اسم المستخدم متصلا: System.Web.HttpContext.Current.User.Identity.Name

في أجل الرجوع إلى هوية المستخدم التي تم إنشاؤها باستخدام مصادقة بسيط في صلب ASP.NET MVC 4 في وحدة تحكم لأغراض التصفية (وهو أمر مفيد إذا كنت تستخدم قاعدة البيانات أولا والكيان الإطار 5 لتوليد الارتباطات رمز الأول والجداول الخاصة بك وتنظم بحيث يتم استخدام مفتاح خارجي إلى هوية المستخدم)، يمكنك استخدام

WebSecurity.CurrentUserId

وبمجرد إضافة العبارة باستخدام

using System.Web.Security;

واسم المستخدم مع:

User.Identity.Name

ولكن اذا كنت بحاجة لمجرد الحصول على ID، يمكنك استخدام:

using Microsoft.AspNet.Identity;

وهكذا، يمكنك الحصول مباشرة على هوية المستخدم:

User.Identity.GetUserId();

ويمكن أن تكون هذه الصفحة ما كنت تبحث عنه:
عن طريق Page.User.Identity.Name في MVC3

وأنت فقط بحاجة User.Identity.Name.

استخدم System.Security.Principal.WindowsIdentity.GetCurrent().Name.

وهذا سوف تحصل على التيار المستخدم تسجيل الدخول ويندوز.

ويمكننا استخدام التعليمات البرمجية التالية للحصول على التيار دخولك العضو في ASP.Net MVC:

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();

وكذلك

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'

Environment.UserName - Will Display format : 'Username'

لما يستحق، في ASP.NET MVC 3 يمكنك فقط استخدام العضو الذي يعود المستخدم للطلب الحالي.

إذا كنت داخل صفحة تسجيل الدخول الخاصة بك، في حالة LoginUser_LoggedIn على سبيل المثال، Current.User.Identity.Name سيعود قيمة فارغة، لذلك يجب عليك استخدام خاصية yourLoginControlName.UserName.

MembershipUser u = Membership.GetUser(LoginUser.UserName);
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 على إنترانت، وهنا بعض النصائح:

(ويندوز سيرفر 2012)

وتشغيل أي شيء يتحدث إلى AD على خادم الويب يتطلب مجموعة من التغيرات والصبر. منذ متى يعمل على خادم الويب مقابل IIS المحلي / IIS اكسبرس تشغيله في هوية AppPool ونحو ذلك، لديك لإعداده لتمثيل كل من يضرب الموقع.

وكيفية الحصول على المستخدم تسجيل في الحالي في الدليل النشط عند تشغيل تطبيق 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:

using (HostingEnvironment.Impersonate()){ ... }

ويجب أيضا أن impersonate مجموعة إلى true في الملف web.config الخاص بك:

<system.web>
    <identity impersonate="true" />

ويجب أن يكون مصادقة Windows على في الملف web.config:

<authentication mode="Windows" />

ويمكنك استخدام التعليمات البرمجية التالية:

Request.LogonUserIdentity.Name;

في Asp.net بعثة التحقق المشتركة الهوية 2، يمكنك الحصول على اسم المستخدم الحالي:

var username = System.Web.HttpContext.Current.User.Identity.Name;

وفي إدارة IIS، تحت مصادقة، تعطيل: 1) مصادقة مجهول 2) نماذج مصادقة

وثم إضافة ما يلي إلى جهاز تحكم، للتعامل مع اختبار مقابل نشر الخادم:

string sUserName = null;
string url = Request.Url.ToString();

if (url.Contains("localhost"))
  sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
  sUserName = User.Identity.Name;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top