Как получить доступ к HttpContext в ASP.NET Core
Джитендра Гунд, MVP сообщества C# Corner и глава отделения C# Corner Pune, рассказал как получить доступ к HttpContext.
HttpContext — это класс в C#, который содержит всю информацию о HTTP-запросе: авторизацию, аутентификацию, запрос, ответ, сеанс, элементы, пользователей, параметры формы и т.д. Каждый HTTP-запрос создает новый объект HttpContext с текущей информацией.
Как получить доступ к HttpContext в контроллере?
Контроллеры предоставляют свойство ControllerBase.HttpContext, чтобы мы могли напрямую обращаться к свойствам HttpContext для текущего запроса HTTP. Лучше всего всегда обращаться к HttpContext через DI с реализацией HttpContextAccessor по умолчанию.
Пример ниже показывает доступ к HttpContext в методе действия GET-контроллера:
[HttpGet("/getDetails")] public string GetDetails() { var result = "Method - " + HttpContext.Request.Method + " Path - " + HttpContext.Request.Path; return result; }
В выводе получим: Method - GET Path - /getdetails
Как получить доступ к HttpContext в Service?
В ASP.NET Core мы можем сделать это с помощью интерфейса IHttpContextAccessor и его реализации по умолчанию HttpContextAccessor. Эту зависимость необходимо добавлять, только если мы хотим получить доступ к HttpContext в Service.
Чтобы использовать HttpContext в Service, нужно сделать следующие два шага:
1. Зарегистрируйте зависимость с помощью встроенного контейнера внедрения зависимостей .NET Core, как показано ниже в классе Startup.cs метода ConfigureServices:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); //IHttpContextAccessor register services.AddHttpContextAccessor(); services.AddTransient<IUserService, UserService>(); }
2. Введите IHttpContextAccessor в созданный конструктор Service и получите доступ к свойствам HttpContext, как показано ниже:
namespace Get_HttpContext_ASP.NET_Core { using Microsoft.AspNetCore.Http; public class UserService : IUserService { private readonly IHttpContextAccessor _httpContextAccessor; public UserService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public string GetLoginUserName() { return _httpContextAccessor.HttpContext.User.Identity.Name; } } }
Пример также можно скачать отсюда.
Примечание: В .NET вместо HttpContext использовали HttpContext.Current, но в ASP.NET Core это свойство не используют больше(см. здесь).
Оригинальная статья доступна по ссылке.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: