ASP.NET 컨트롤러 외부에서 현재 사용자 가져오기

6263 단어 dotnet
다음과 같은 방법으로 컨트롤러 작업 메서드에서 현재 인증된 사용자에 액세스할 수 있습니다.

[Route("[controller]")]
public class InternalController : ControllerBase
{
  [HttpGet]
  [Authorize]
  public string GetCurrentUser()
  {
    return base.User.Identity.Name;
  }
}


예를 들어 MediatR 처리기에서와 같이 컨트롤러 외부에서 액세스하려면 ASP.NET에서 이미 제공하는 IHttpContextAccessor 서비스를 주입하고 사용해야 합니다.

[Route("[controller]")]
public class InternalController : ControllerBase
{
  private readonly IMediator _mediator;

  public InternalController(IMediator mediator) 
  {
    _mediator = mediator;
  }

  [HttpGet]
  [Authorize]
  public async Task<string> GetCurrentUser()
  {
    var response = await _mediator.Send(new GetCurrentUser.Request());
    return response.CurrentUserName;
  }
}

public class GetCurrentUser
{
  public class Request : IRequest<Response> { }

  public class Response 
  { 
    public string CurrentUserName { get; set; }
  }

  public class Handler : IRequestHandler<Request, Response>
  {
    private readonly IHttpContextAccessor _httpContextAccessor;

    public Handler(IHttpContextAccessor httpContextAccessor)
    {
      _httpContextAccessor = httpContextAccessor;
    }

    public Task<Response> Handle(Request request, CancellationToken cancellationToken)
    {
      return Task.FromResult(new Response 
      { 
        CurrentUserName = _httpContextAccessor.HttpContext.User.Name
      });
    }
  }
}


마지막으로 이 작업을 수행하려면 IHttpContextAccessor 클래스에 Startup 종속성을 등록해야 합니다.

// ConfigureServices
services.AddHttpContextAccessor();

좋은 웹페이지 즐겨찾기