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

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

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

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023