How to get a User ID in Asp.Net Core 3.1 (ClaimPrincipal) in a Service Repository

Question: How do you get user id in .net core MVC from a service repository?

Login to See the Rest of the Answer

The User's Id can be obtained from .net core application in several ways, one of them is by getting User from an HttpContext:

  1. Create an Interface with a name "IUserUtility" that has a function defined as "GetUserID"
    - This function can return a Task of a "String" if you like.

  2. Create a Mock Repository that implements the "IUserUtility"
    - In the Mock Repository, create a constructor that will utilize "Dependency Injection".

    - Dependency Injection will help you get access to Asp.Net Core inbuilt API's and other Services (User-defined Interfaces registered as Services in Startup.cs File).

    - In the Mock Repository, Inject HttpContext in the Constructor as well as define a private property on top of the Constructor
         - Defining a private read-only helps your application not to create a memory consuming variable that sometimes hangs even when the Service is not being utilized. Creating private read-only will allocate small portion of memory to that private variable and return the memory to the application when the variable is not in use.

    - wire the private HttpContext _httpContext with the HttpContext httpContext injected in the Constructor, this will input the httpContext Service coming from the Application Startup.cs Services into a private readonly _httpContext.

    - After implementing the UserUtility Interface go ahead and write your code in the GetUserID() function. This function will contain code that gets User ID and returns a string or an object containing the Current Logged in User ID.

  3. See the Code below for reference:
    //This an Interface
    namespace YourProjectName.FirstLevelFolder.FinalFolderYourInterfaceClassIsLocated
        public interface IUserUtility
            Task<string> GetUserID();
    //This is a Service Mock Repository Class that implements IUserUtility Interface
    namespace ProjectName.FolderName
        public class UserUtilityRepository : IUserUtility
            private readonly SignInManager<AnotherUserMockRepositoryClass> _signInManager;
            private readonly HttpContext _contextRequest;
            public UserUtilityRepository(SignInManager<AnotherUserMockRepositoryClass> signInManager, HttpContext contextRequest)
                _signInManager = signInManager;
                _contextRequest = contextRequest;
            public async Task<string> GetUserID()
                ClaimsPrincipal principal = _contextRequest.User as ClaimsPrincipal;
               string UserID = _signInManager.UserManager.GetUserId(principal);
                return UserID;

    [NB]: Errors: You might an error that says:

    An unhandled exception occurred while processing the request.

    InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Http.HttpContext' while attempting to activate 'YouProject.Controllers.YourController'.

    Try: Dont't forget to add services.AddHttpContextAccessor in Startup.cs class.

If you log in, you will be notified when someone leaves a comment.

Other users would like to know if this solution helped you.

© 2023 - ErnesTech LLC- Privacy