Dev (Back & Front)ARTIGO

ASP .NET Core 2.0 – Usando o HttpContext

Neste artigo, o autor mostra como usar os recursos do HttpContext na ASP .NET Core.

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.

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil