Neste artigo vou mostrar como usar os recursos do HttpContext na ASP .NET Core.
Muitas vezes precisamos acessar informações sobre o request, o response, informações sobre autenticação e outras informações da requisição atual. Para isso, podemos usar a classe HttpContext.
Essa classe encapsula toda a informação HTTP específica sobre uma requisição HTTP individual e o seu comportamento é praticamente o mesmo do HttpContext que era usado na ASP .NET, com uma diferença: ele não esta automaticamente disponível em todos os lugares do seu código, como antes.
Se você estiver em um Controller, ele está disponível, pois todo o controlador herda da classe Controller, que herda da classe BaseController, que fornece a instância de HttpContext no controlador.
Se você estiver em um Middleware, ele é passado como um parâmetro:
public async Task Invoke(HttpContext httpContext)
{
.....
await next.Invoke(httpContext);
}
Agora, se você precisar acessar os recursos do HttpContext em um serviço ou na sua camada de domínio, você terá que fazer o seguinte:
1- Registrar a interface IHttpContextAccessor() para injeção de dependência no método ConfigureServices() da classe Startup():
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
...
}
2 – Injetar a dependência para obter a referência ao HttpContext e poder usá-lo:
public class UsuarioService : IUsuarioService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UsuarioService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public bool IsUserLoggedIn()
{
var context = _httpContextAccessor.HttpContext;
return context.User.Identities.Any(x => x.IsAuthenticated);
}
}
O código acima mostra, como exemplo, a utilização do HttpContext em um serviço onde, após registrar a interface IHttpContextAccessor(), estamos obtendo a referência à mesma, via injeção de dependência.
Acessando o HttpContext de um Controller
Apenas para ilustrar, temos abaixo o código em um controlador que mostra como acessar informações do HttpContext:
System;
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Mvc;
namespace mvc1.Controllers
{
public class ProdutoController : Controller
{
public string Index()
{
var https = HttpContext.Request.IsHttps;
var caminho = HttpContext.Request.Path;
var status = HttpContext.Response.StatusCode;
var conexao = HttpContext.Connection.ToString();
return https + "\r\n" + caminho + "\r\n" + status + "\r\n" + conexao;
}
}
}

Assim, nas versões anteriores do .NET Core, o IHttpContextAccessor era registrado automaticamente.
Agora, a partir da versão 1.1, você tem que registrá-lo manualmente se você pretende usar esses serviços internos ou na sua camada de domínio.




