ASP .NET Core 2.0 - Usando o HttpContext
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 esta 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 mostrar 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.
"Se alguém quer vir após mim (Jesus), a si mesmo
se negue, tome a sua cruz e siga-me" (Mateus 16:24).
Referências: