কীভাবে বর্তমান এএসপি.এনইটি কোর-এ ব্যবহারকারী আইডিতে লগইন করা যায়


179

আমি এমভিসি 5 ব্যবহার করে এর আগে এটি করেছি User.Identity.GetUserId()তবে এখানে কাজ হবে বলে মনে হয় না। User.Identityস্বল্পতা আছে GetUserId()পদ্ধতি

আমি ব্যাবহার করছি Microsoft.AspNet.Identity


2
এই চেষ্টা System.Web.HttpContext.Current.User.Identity.Name?
প্রবীণ দেশমুখ

আপনাকে @ প্রবীণদেশমুখ আপনাকে ধন্যবাদ তবে এটি ব্যবহারকারীর নাম ফিরিয়ে দেয় এবং আইডি নয়
এমআরাইনজো

1
এটি কাজ করা উচিত. নমুনাগুলি দেখুন asp.net github.com/aspnet/Identity/blob/… । শুধু নিশ্চিত ব্যবহারকারী লগ ইন থাকলেও করতে @PravinDeshmukh, System.Web.HttpContext.Current vnext মধ্যে :) ব্যবহার না।
user960567

1
হাই @ user960567, আপনি দয়া করে কেন আমাদের বলতে পারেন?
প্রবীণ দেশমুখ

@ প্রবীণদেশমুখ, কারণ এটি .NET কোর নিয়ে কাজ করবে না এবং সিস্টেম নেই e ওয়েব নির্ভরতা।
ব্যবহারকারী 960567

উত্তর:


148

এএসপি.নেট কোর সংস্করণ> = 2.0 এ আপডেট

নিয়ামক মধ্যে:

public class YourControllerNameController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;

    public YourControllerNameController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

    public async Task<IActionResult> YourMethodName()
    {
        var userId =  User.FindFirstValue(ClaimTypes.NameIdentifier) // will give the user's userId
        var userName =  User.FindFirstValue(ClaimTypes.Name) // will give the user's userName

        ApplicationUser applicationUser = await _userManager.GetUserAsync(User);
        string userEmail = applicationUser?.Email; // will give the user's Email
    }
}

অন্য কিছু শ্রেণিতে:

public class OtherClass
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public OtherClass(IHttpContextAccessor httpContextAccessor)
    {
       _httpContextAccessor = httpContextAccessor;
    }

   public void YourMethodName()
   {
      var userId = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
   }
}

তারপর আপনি রেজিস্টার করা উচিত IHttpContextAccessorমধ্যে Startupনিম্নরূপ শ্রেণী:

public void ConfigureServices(IServiceCollection services)
{
    services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

    // Or you can also register as follows

    services.AddHttpContextAccessor();
}

আরও পঠনযোগ্যতার জন্য লিখুন এক্সটেনশন পদ্ধতিগুলি নিম্নরূপ:

public static class ClaimsPrincipalExtensions
{
    public static T GetLoggedInUserId<T>(this ClaimsPrincipal principal)
    {
        if (principal == null)
            throw new ArgumentNullException(nameof(principal));

        var loggedInUserId = principal.FindFirstValue(ClaimTypes.NameIdentifier);

        if (typeof(T) == typeof(string))
        {
            return (T)Convert.ChangeType(loggedInUserId, typeof(T));
        }
        else if (typeof(T) == typeof(int) || typeof(T) == typeof(long))
        {
            return loggedInUserId != null ? (T)Convert.ChangeType(loggedInUserId, typeof(T)) : (T)Convert.ChangeType(0, typeof(T));
        }
        else
        {
            throw new Exception("Invalid type provided");
        }
    }

    public static string GetLoggedInUserName(this ClaimsPrincipal principal)
    {
        if (principal == null)
            throw new ArgumentNullException(nameof(principal));

        return principal.FindFirstValue(ClaimTypes.Name);
    }

    public static string GetLoggedInUserEmail(this ClaimsPrincipal principal)
    {
        if (principal == null)
            throw new ArgumentNullException(nameof(principal));

        return principal.FindFirstValue(ClaimTypes.Email);
    }
}

তারপরে নিম্নলিখিত হিসাবে ব্যবহার করুন:

public class YourControllerNameController : Controller
{
    public IActionResult YourMethodName()
    {
        var userId = User.GetLoggedInUserId<string>(); // Specify the type of your UserId;
        var userName = User.GetLoggedInUserName();
        var userEmail = User.GetLoggedInUserEmail();
    }
}

public class OtherClass
{
     private readonly IHttpContextAccessor _httpContextAccessor;
     public OtherClass(IHttpContextAccessor httpContextAccessor)
     {
         _httpContextAccessor = httpContextAccessor;
     }

     public void YourMethodName()
     {
         var userId = _httpContextAccessor.HttpContext.User.GetLoggedInUserId<string>(); // Specify the type of your UserId;
     }
}

1
কিন্তু ব্যবহারকারী আমার ক্ষেত্রে শূন্য ফিরে আসছে? আমি কোথায় ভুল করছি?
শ্রুতি বর্গি

আপনি কি নিশ্চিত যে আপনি কোনও ব্যবহারকারীর সাথে লগ ইন করেছেন?
তানভীর আর্জেল

আমার পরিস্থিতিটি যেমন আমার সিস্টেমে লগইন করা হয়েছে তার ব্যবহারকারীর নাম চাই। এটি উবুন্টু হোক বা উইন্ডোজ? এবং আমি উইন্ডোতে এটি পরীক্ষা করায় আমি আমার নেমে লগ ইন করেছি। তবে ফিরে আসছে null
শ্রুতি বর্গি

তারপরে আপনার কোডটি দেখতে হবে! এখানে কোনও ভূমিকা পালনকারী কোনও বহিরাগত এজেন্ট হতে পারে।
তানভীর আর্জেল

2
আমি খুঁজে পেয়েছি যে যদি আপনি কোনও শূন্য ফলাফল পেয়ে থাকেন তবে User.Identity.Nameএটি হতে পারে কারণ অজ্ঞাতনামা প্রমাণীকরণ সক্ষম হয়েছে। আমি পেতে সক্ষম ছিল User.Identity.Nameসম্প্রসারিত করে আমার ডোমেন এবং ব্যবহারকারী নাম ফিরতে Properties > launchSettings.json, আর সেটিং anonymousAuthenticationথেকে false, এবং windowsAuthenticationকরতে true
অ্যান্ড্রু গ্রে

109

এএসপি.নেট কোর 1.0 টি আরসি 1 অবধি :

এটি সিস্টেম.সিকিউরিটি থেকে ব্যবহারকারী.গেট ইউজারআইডি () ।

যেহেতু এএসপি.নেট কোর 1.0 আরসি 2 :

আপনি এখন ব্যবহার করতে হবে UserManager । আপনি বর্তমান ব্যবহারকারী পেতে একটি পদ্ধতি তৈরি করতে পারেন:

private Task<ApplicationUser> GetCurrentUserAsync() => _userManager.GetUserAsync(HttpContext.User);

এবং অবজেক্টের সাথে ব্যবহারকারীর তথ্য পান:

var user = await GetCurrentUserAsync();

var userId = user?.Id;
string mail = user?.Email;

দ্রষ্টব্য: আপনি এটির মতো একক লাইন লেখার কোনও পদ্ধতি ব্যবহার না করে এটি করতে পারেন string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email, তবে এটি একক দায়িত্বের নীতিকে সম্মান করে না। আপনি ব্যবহারকারীকে যেভাবে পেয়েছেন তা আলাদা করে দেওয়া ভাল কারণ যদি কোনও দিন আপনি নিজের ব্যবহারকারীর পরিচালনা ব্যবস্থা পরিবর্তন করার সিদ্ধান্ত নেন, যেমন পরিচয়ের চেয়ে অন্য সমাধান ব্যবহার করা, তবে আপনার সম্পূর্ণ কোডটি পর্যালোচনা করতে হবে বলে এটি বেদনাদায়ক হয়ে উঠবে।


1
আমার কাছে সিস্টেম.সিকিউরিটি.ক্লেমস নেমস্পেস এবং মাইক্রোসফ্ট.এএসপনেট.এডেন্টিটি অ্যাসেম্বলি রয়েছে।
স্কটিথেকেল

2
আমি মনে করি যে এই উত্তরটি গ্রহণযোগ্য উত্তরের চেয়ে ভাল, বিশেষত যেহেতু এসপ নেট মূল নির্ভরতা ইনজেকশন প্রচার করে।
ফিলিপ ডেভিস

2
ভুল উপায় বলে মনে হচ্ছে কারণ ব্যবহারকারীর ব্যবহারকারীর সম্পর্কে তথ্য পুনরুদ্ধার করার জন্য ডাটাবেসে একটি অনুরোধ জানাবে user এবং এই ক্ষেত্রে ইউজারআইডিটি ইতিমধ্যে এইচটিপিপেক্সটেক্সট এ উপলব্ধ ছিল ser ব্যবহারকারী
ছদ্মবেশী

@ ছদ্মবেশী সনাক্তকারীটি কেবল একটি উদাহরণ ছিল তবে আপনি ব্যবহারকারীর অবজেক্টের সাথে আপনার প্রয়োজনীয় সমস্ত তথ্য পেতে পারেন
অ্যাড্রিয়েনটরিস

2
@ অ্যাড্রিন কিন্তু প্রশ্নটি ছিল ইউজার আইডি কীভাবে পাবেন। শুধু বলতে চেয়েছিলেন যে সরবরাহিত উপায়টি সবচেয়ে কার্যকর নয় not এই ক্ষেত্রে আমি সোরেন বা সংক্ষিপ্ত সংস্করণ দ্বারা উত্তর পছন্দ করব যা মন্তব্যে পাওয়া যাবে।
ছদ্মবেশী

91

আপনি এটি আপনার নিয়ামকের মধ্যে পেতে পারেন:

using System.Security.Claims;
var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

বা পূর্বের মতো একটি এক্সটেনশন পদ্ধতি লিখুন। কোর ভি 1.0

using System;
using System.Security.Claims;

namespace Shared.Web.MvcExtensions
{
    public static class ClaimsPrincipalExtensions
    {
        public static string GetUserId(this ClaimsPrincipal principal)
        {
            if (principal == null)
                throw new ArgumentNullException(nameof(principal));

            return principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        }
    }
}

এবং যেখানেই ব্যবহারকারী দাবি প্রিন্সিপাল উপলব্ধ সেখানে পান :

using Microsoft.AspNetCore.Mvc;
using Shared.Web.MvcExtensions;

namespace Web.Site.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return Content(this.User.GetUserId());
        }
    }
}

16
সংক্ষিপ্ত সংস্করণ:var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
সিফ্রেটিস

1
নোট করুন যে এই এক্সটেনশন পদ্ধতিটি কেবল নিয়ন্ত্রণকারীদের অভ্যন্তরে ব্যবহারকারীর জন্য কাজ করে, উপাদানগুলি নয়, কারণ ভিউ উপাদানটি আইপিএসিন্টিয়ালের
adam3039

@K আপনি Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))পূর্ণসংখ্যার ব্যবহারকারী আইডি পেতে ব্যবহার করতে পারেন
হামজা খানজাদা

1
হামজা খানজাদা হ্যাঁ, এটি কাজ করে তবে এতো দীর্ঘ এবং কুরুচিপূর্ণ দেখায়।
একে

39

আমি সিস্টেম.সিকিউরিটি.যুক্তি ব্যবহার করে অন্তর্ভুক্ত করেছি এবং আমি getUserId () এক্সটেনশন পদ্ধতিতে অ্যাক্সেস করতে পারি

এনবি: আমার কাছে মাইক্রোসফ্ট.এএসপনেট.আইডেন্টিটি ব্যবহার ছিল কিন্তু এক্সটেনশন পদ্ধতিটি পাইনি। সুতরাং আমি অনুমান করি যে উভয়কেই একে অপরের সাথে মিলিয়ে ব্যবহার করতে হবে

using Microsoft.AspNet.Identity;
using System.Security.Claims;

সম্পাদনা : এই উত্তরটি এখন পুরানো। সিওআর 1.0 এ অর্জনের একটি তারিখের জন্য সোরেনের বা অ্যাড্রিনের উত্তরটি দেখুন


17
এটি ছিল গোপন সস, তবে কারও জন্য আপনি এই ব্যবহারগুলি যুক্ত করার পরে নজর রাখছেন ... var userId = User.GetUserId();
সামুরাই কেন

4
.GetUserId () দাবীপ্রিন্সিপাল (কন্ট্রোলার.উজার) থেকে এক্সটেনশনটি => ইউজারম্যানেজার.গেটউজারআইডি (ব্যবহারকারী) এ সরানো হয়েছে;
সোরেন

1
সিস্টেম.সিকিউরিটি.যুক্তি ব্যবহার করে; var userId = this.User.FindFrst (দাবী টাইপস.নামআইডেন্টিফায়ার);
স্যুইচ করুন

3
পূর্ববর্তী বৈধ উত্তরের জন্য এবং সঠিকভাবে নতুন "সঠিক" উত্তর সনাক্ত করার জন্য থাম্বস আপ।
পিমব্রউবার্স

26

শুধুমাত্র নেট নেট 2.0 এর জন্য নিম্নলিখিত শ্রেণিতে লগ-ইন করা ব্যবহারকারীর ইউজারআইডি আনতে প্রয়োজনীয় Controller:

var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

অথবা

var userId = HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);

যেমন

contact.OwnerID = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

17

এই পোস্টে কোথাও বলা হয়েছে, গেট ইউজারআইডি () পদ্ধতিটি ইউজারম্যানেজারে সরানো হয়েছে।

private readonly UserManager<ApplicationUser> _userManager;

public YourController(UserManager<ApplicationUser> userManager)
{
    _userManager = userManager;
}

public IActionResult MyAction()
{
    var userId = _userManager.GetUserId(HttpContext.User);

    var model = GetSomeModelByUserId(userId);

    return View(model);
}

আপনি যদি একটি খালি প্রকল্প শুরু করে থাকেন তবে আপনাকে স্টার্টআপ। সিগুলিতে আপনার ব্যবহারকারীর ব্যবহারকারীর ম্যানেজার যুক্ত করতে হবে। অন্যথায় এটি ইতিমধ্যে হওয়া উচিত।


10

আপনাকে মাইক্রোসফ্ট.এএসপনেটকোর.ইডেন্টিটি এবং সিস্টেম.সিকিউরিটি.ক্লেমস আমদানি করতে হবে

// to get current user ID
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

// to get current user info
var user = await _userManager.FindByIdAsync(userId);

এই সমস্ত আনসারদের মধ্যে আপনার একমাত্র এএসপি.নেট কোর ভি 2.0 এর সাথে কাজ করে। Congratz!
জাস্ট ফেয়ার

এই হল. .NET কোর 2.0 এবং উপরের যে কেউ, এটি আপনার উত্তর
alvinchesaro

1
একটি ওয়েব এপিআই + জেডব্লিউটি সেটিংয়ে। নেট কোর 3.1 এ পরীক্ষিত। আমি বর্তমানে বেস কন্ট্রোলারে ব্যবহারকারীকে সাইন ইন করতে চাই, এটি দক্ষ নয়, প্রতিটি অনুরোধের জন্য ডাটাবেস থেকে ব্যবহারকারীকে জিজ্ঞাসা করা ইত্যাদি। ডাটাবেস অনুসন্ধান না করে বর্তমান ব্যবহারকারীকে পাওয়ার কী কোনও উপায় আছে?
নেক্সাস

আমার "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"জন্য কেন ফিরে আসে User.FindFirstValue(ClaimTypes.NameIdentifier);?
পুরিলি

5

যদিও অ্যাড্রিনের উত্তরটি সঠিক, আপনি একক লাইনে এগুলি করতে পারেন। অতিরিক্ত ফাংশন বা জগাখিচির দরকার নেই।

এটি কাজ করে আমি এএসপি.নেট কোর 1.0 এ এটি পরীক্ষা করেছিলাম

var user = await _userManager.GetUserAsync(HttpContext.User);

তারপরে আপনি যেমন ভেরিয়েবলের অন্যান্য বৈশিষ্ট্য পেতে পারেন user.Email। আমি আশা করি এটা কারো সাহায্যে লাগবে.


3
আমি যে পদ্ধতিটি ব্যবহার করছি তার কারণটি হ'ল একক দায়বদ্ধতার নীতিকে সম্মান করা। আপনি যদি ব্যবহারকারীটিকে পাওয়ার উপায়টি বিচ্ছিন্ন না করেন তবে কোনও দিন আপনি নিজের ব্যবহারকারীর ব্যবস্থাপনার সিস্টেমটি পরিবর্তন করার সিদ্ধান্ত নেন, যেমন পরিচয়ের চেয়ে অন্য সমাধানটি ব্যবহার করার মতো pain
অ্যাড্রিয়েনটরিস

5

এএসপি.নেট কোর 2.0, সত্তা ফ্রেমওয়ার্ক কোর 2.0, অ্যাস্পনেটকোর.ইডেন্টিটি 2.0 এপিআই ( https://github.com/kkagill/ContosoUniversity- ব্যাকএন্ড ):

Idপরিবর্তন করা হয়েছেUser.Identity.Name

    [Authorize, HttpGet("Profile")]
    public async Task<IActionResult> GetProfile()
    {
        var user = await _userManager.FindByIdAsync(User.Identity.Name);

        return Json(new
        {
            IsAuthenticated = User.Identity.IsAuthenticated,
            Id = User.Identity.Name,
            Name = $"{user.FirstName} {user.LastName}",
            Type = User.Identity.AuthenticationType,
        });
    }

প্রতিক্রিয়া:

এখানে চিত্র বর্ণনা লিখুন


আমার পরীক্ষার ভিত্তিতে, this.User.Identity.Nameযদিও ব্যবহারকারীর নাম হয় না। আমার পরীক্ষায়, ব্যবহারকারীর নামটি একটি ইমেল, নিবন্ধকরণ থেকে ব্যবহারকারী লগ-ইন বা বহিরাগত লগইন (যেমন, ফেসবুক, গুগল) থেকে লগ-ইন হোন। নিম্নলিখিত কোড ব্যবহারকারীর ID প্রদান করে। আমি আমার পরিচয় ব্যবহারকারীর টেবিলের জন্য একটি স্ব-বর্ধিত প্রাথমিক কী ব্যবহার করি, সুতরাং অন্তর্ভুক্ত করুন ars int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
মাইকেল বুয়েন

1
FindByIdAsyncআপনি যেমন একটি ব্যবহারকারীর নাম সরবরাহ করছেন তেমন কাজ করে না। আপনি এটি দ্বারা প্রতিস্থাপন করা হলে এটি কাজ করে FindByNameAsync
জ্যাস্পার

4

মধ্যে APiController

User.FindFirst(ClaimTypes.NameIdentifier).Value

এরকম কিছু আপনি দাবিগুলি পাবেন


1

User.Identity.GetUserId ();

এসপ নেট পরিচয় কোর 2.0 তে বিদ্যমান নেই। এই ক্ষেত্রে, আমি বিভিন্নভাবে পরিচালনা করেছি। ব্যবহারকারীর তথ্য পাওয়ার কারণে আমি পুরো অ্যাপ্লিকেশনটি ব্যবহারের জন্য একটি সাধারণ শ্রেণি তৈরি করেছি।

একটি সাধারণ শ্রেণি তৈরি করুন PCommon & ইন্টারফেস IPCommon যুক্ত রেফারেন্সusing System.Security.Claims

using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;

namespace Common.Web.Helper
{
    public class PCommon: IPCommon
    {
        private readonly IHttpContextAccessor _context;
        public PayraCommon(IHttpContextAccessor context)
        {
            _context = context;
        }
        public int GetUserId()
        {
            return Convert.ToInt16(_context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier));
        }
        public string GetUserName()
        {
            return _context.HttpContext.User.Identity.Name;
        }

    }
    public interface IPCommon
    {
        int GetUserId();
        string GetUserName();        
    }    
}

এখানে সাধারণ শ্রেণির প্রয়োগ

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Logging;
using Pay.DataManager.Concreate;
using Pay.DataManager.Helper;
using Pay.DataManager.Models;
using Pay.Web.Helper;
using Pay.Web.Models.GeneralViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Pay.Controllers
{

    [Authorize]
    public class BankController : Controller
    {

        private readonly IUnitOfWork _unitOfWork;
        private readonly ILogger _logger;
        private readonly IPCommon _iPCommon;


        public BankController(IUnitOfWork unitOfWork, IPCommon IPCommon, ILogger logger = null)
        {
            _unitOfWork = unitOfWork;
            _iPCommon = IPCommon;
            if (logger != null) { _logger = logger; }
        }


        public ActionResult Create()
        {
            BankViewModel _bank = new BankViewModel();
            CountryLoad(_bank);
            return View();
        }

        [HttpPost, ActionName("Create")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Insert(BankViewModel bankVM)
        {

            if (!ModelState.IsValid)
            {
                CountryLoad(bankVM);
                //TempData["show-message"] = Notification.Show(CommonMessage.RequiredFieldError("bank"), "Warning", type: ToastType.Warning);
                return View(bankVM);
            }


            try
            {
                bankVM.EntryBy = _iPCommon.GetUserId();
                var userName = _iPCommon.GetUserName()();
                //_unitOfWork.BankRepo.Add(ModelAdapter.ModelMap(new Bank(), bankVM));
                //_unitOfWork.Save();
               // TempData["show-message"] = Notification.Show(CommonMessage.SaveMessage(), "Success", type: ToastType.Success);
            }
            catch (Exception ex)
            {
               // TempData["show-message"] = Notification.Show(CommonMessage.SaveErrorMessage("bank"), "Error", type: ToastType.Error);
            }
            return RedirectToAction(nameof(Index));
        }



    }
}

ব্যবহারকারীর আইডি এবং নাম সন্নিবেশ ক্রিয়ায় পান

_iPCommon.GetUserId();

ধন্যবাদ, মাকসুদ


1
আপনি কি স্টার্টআপ। সি-তে আইএইচটিটিপেক্সটেক্সট্যাক্সেসর নিবন্ধন করতে হবে?
REMESQ

1
কোন রেমসিকিউ, আমি এটি সূচনাতে ইনজেকশন করি নি, তবে আমার অ্যাপ্লিকেশনটিতে কাজ করছি
মাকসুদ

1

রেজার ভিউগুলিতে বর্তমান ব্যবহারকারীর আইডি পাওয়ার জন্য আমরা ব্যবহারকারী ম্যানেজারকে এই মতটিতে ইনজেক্ট করতে পারি:

@inject Microsoft.AspNetCore.Identity.UserManager<ApplicationUser> _userManager
@{ string userId = _userManager.GetUserId(User); }

আশা করি এটি আপনার কাজে লাগবে।


0

ব্যবহার করতে পারেন

string userid = User.FindFirst("id").Value;

কোনও কারণে নেমআইডেন্টিফায়ার এখন ব্যবহারকারীর নামটি পুনরুদ্ধার করুন (। নেট কোর 2.2)


0

প্রশাসক হিসাবে অন্য ব্যক্তির প্রোফাইলে কাজ করছেন এবং আপনার যে প্রোফাইলটিতে কাজ করছেন তার আইডি পাওয়া দরকার, আপনি আইডি যেমন ভিউব্যাগ.উউজারআইডি = ইউজারআইডি ক্যাপচার করতে একটি ভিউব্যাগ ব্যবহার করতে পারেন; যখন ইউজারআইডি আপনি কাজ করছেন সেই পদ্ধতির স্ট্রিং প্যারামিটার while

    [HttpGet]

    public async Task<IActionResult> ManageUserRoles(string userId)
    {

          ViewBag.UserId = userId;


        var user = await userManager.FindByIdAsync(userId);

        if (user == null)
        {
            ViewBag.ErrorMessage = $"User with Id = {userId} cannot be found";
            return View("NotFound");
        }

        var model = new List<UserRolesViewModel>();

        foreach (var role in roleManager.Roles)
        {
            var userRolesViewModel = new UserRolesViewModel
            {
                RoleId = role.Id,
                RoleName = role.Name
            };

            if (await userManager.IsInRoleAsync(user, role.Name))
            {
                userRolesViewModel.IsSelected = true;
            }
            else
            {
                userRolesViewModel.IsSelected = false;
            }

            model.Add(userRolesViewModel);
        }
        return View(model);
    }

-11

আপনি যদি এএসপি.নেট এমভিসি কন্ট্রোলারে এটি চান তবে ব্যবহার করুন

using Microsoft.AspNet.Identity;

User.Identity.GetUserId();

আপনাকে usingবিবৃতি যুক্ত GetUserId()করতে হবে কারণ এটি ছাড়া সেখানে থাকবে না।


2
হ্যাঁ, আমি "মাইক্রোসফ্ট.অ্যাসপনেট.আইডেন্টিটি" ব্যবহার করা প্রশ্নটিতে আমি অন্তর্ভুক্ত করেছি। আমি পোস্টে আমার উত্তর দিয়ে যদিও এটি কীভাবে সমাধান করবেন তা আমি ভেবেছিলাম
মাইরেনজো

1
এফডাব্লুআইডাব্লু এটি (এখন) User.GetUserId()এবং নয়User.Identity.GetUserId()
এলসি।

18
প্রশ্নটি ছিল এবং আবু অ্যাপ নেট কোর, যার নাম স্থান মাইক্রোসফ্ট.এস্পনেটকোর.ইডেন্টিটি রয়েছে; এবং মাইক্রোসফ্ট.এএসপনেট.আইডেন্টিটি নয়; এবং সেই নতুন নেমস্পেসটি ব্যবহার করে কোনও গেট ইউজারআইডি () এক্সটেনশন পদ্ধতি নেই। এই উত্তরটি ভুল!
পাস্কাল

4
সমস্ত ক্যাপগুলিতে সহজ। এবং এসও তে সুন্দর হওয়া সম্পর্কে শিখুন। stackoverflow.blog/2018/04/26/...
smoore4
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.