Рубріки: Back-end

Как получить доступ к 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 это свойство не используют больше(см. здесь).

Оригинальная статья доступна по ссылке.

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024