TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1010 1.24K
День восемьсот двадцать четвёртый. #ЗаметкиНаПолях
Как Обратиться к HttpContext в
ASP.NET Core
Как правило, переход от веб-форм или из MVC5 в ASP.NET Core требует значительного рефакторинга. Например, HttpContext.Current был удалён в ASP.NET Core. Доступ к текущему контексту HTTP из отдельной библиотеки классов – это один из примеров беспорядочной архитектуры, которых ASP.NET Core пытается избежать. Есть несколько способов получить текущий контекст запроса в ASP.NET Core.

Что такое HttpContext?
Это объект, содержащий информацию о текущем Http-запросе: авторизация, аутентификация, объекты запроса и ответа, сессию, текущего пользователя, отправленные данные формы и т.п. Каждый Http-запрос создаёт новый объект HttpContext с актуальной информацией.

1. Доступ к HttpContext из контроллера?
Контроллеры предоставляют свойство ControllerBase.HttpContext, чтобы мы могли напрямую обращаться к контексту текущего Http-запроса:
[HttpGet("/getDetails")]
public string GetDetails() {
var result =
"Method: " + HttpContext.Request.Method +
" Path: " + HttpContext.Request.Path;
return result;
}
Вывод:
Method: GET Path: /getdetails

2. Доступ к HttpContext из промежуточного ПО
Если вы пишете собственный вариант промежуточного ПО, то контекст текущего запроса передаётся в метод Invoke/InvokeAsync:
public async Task InvokeAsync (HttpContext context) {
…
}

3. Доступ к HttpContext из сервиса
Если нужно получить доступ к HttpContext в сервисе, мы можем сделать это с помощью интерфейса IHttpContextAccessor и его реализации по умолчанию HttpContextAccessor. Эту зависимость необходимо добавлять только в том случае, если мы хотим получить доступ к HttpContext в сервисе.

Шаг 1. Зарегистрируйте зависимость и сервис:
public void ConfigureServices
(IServiceCollection services) {
…
services.AddHttpContextAccessor();
// до .NET Core 2.2 используйте
//services
// .TryAddSingleton<IHttpContextAccessor,
// HttpContextAccessor>();

services.AddTransient<IUserService, UserService>();
…
}

Шаг 2: внедрите IHttpContextAccessor в конструктор сервиса:
public class UserService : IUserService {
private IHttpContextAccessor
_httpContextAccessor;

public UserService(IHttpContextAccessor hca)
{
_httpContextAccessor = hca;
}

public string GetLoginUserName() {
return _httpContextAccessor
.HttpContext.User.Identity.Name;
}
}

Источники:
-
https://www.telerik.com/blogs/how-to-get-httpcontext-asp-net-core
-
https://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-core
  • 👍 1
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →