Джитендра Гунд, 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 это свойство не используют больше(см. здесь).
Оригинальная статья доступна по ссылке.
Visual Code от Microsoft, вероятно, один из самых популярных редакторов кода. Разработчики любят его за…
Япония сама по себе — сплошной киберпанк. Это заметил даже культовый писатель жанра Уильям Гибсон,…
Сам по себе телефон Айфон 17 Про Макс – отличный подарок. У него красивая заводская…
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…