Added documentation for IHttpContextAccessor to describe its use in c… (#6489)
parent
396bb06f5c
commit
07e2dc83ff
|
@ -0,0 +1,117 @@
|
|||
---
|
||||
title: Access HttpContext in ASP.NET Core
|
||||
author: coderandhiker
|
||||
description: Learn how to access HttpContext in ASP.NET Core.
|
||||
ms.author: riande
|
||||
ms.custom: mvc
|
||||
ms.date: 07/20/2018
|
||||
uid: fundamentals/httpcontext
|
||||
---
|
||||
# Access HttpContext in ASP.NET Core
|
||||
|
||||
ASP.NET Core apps access the `HttpContext` through the [IHttpContextAccessor](/dotnet/api/microsoft.aspnetcore.http.ihttpcontextaccessor) interface and its default implementation [HttpContextAccessor](/dotnet/api/microsoft.aspnetcore.http.httpcontextaccessor).
|
||||
|
||||
::: moniker range=">= aspnetcore-2.0"
|
||||
|
||||
## Use HttpContext from Razor Pages
|
||||
|
||||
The Razor Pages [PageModel](/dotnet/api/microsoft.aspnetcore.mvc.razorpages.pagemodel) exposes the [HttpContext](/dotnet/api/microsoft.aspnetcore.mvc.razorpages.pagemodel.httpcontext) property:
|
||||
|
||||
```csharp
|
||||
public class AboutModel : PageModel
|
||||
{
|
||||
public string Message { get; set; }
|
||||
|
||||
public void OnGet()
|
||||
{
|
||||
Message = HttpContext.Request.PathBase;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
::: moniker-end
|
||||
|
||||
## Use HttpContext from a controller
|
||||
|
||||
Controllers expose the [ControllerBase.HttpContext](/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.httpcontext) property:
|
||||
|
||||
```csharp
|
||||
public class HomeController : Controller
|
||||
{
|
||||
public IActionResult About()
|
||||
{
|
||||
var pathBase = HttpContext.Request.PathBase;
|
||||
// Do something with the PathBase.
|
||||
|
||||
return View();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Use HttpContext from middleware
|
||||
|
||||
When working with custom middleware components, `HttpContext` is passed into the `Invoke` or `InvokeAsync` method and can be accessed when the middleware is configured:
|
||||
|
||||
```csharp
|
||||
public class MyCustomMiddleware
|
||||
{
|
||||
public Task InvokeAsync(HttpContext context)
|
||||
{
|
||||
// Middleware initialization optionally using HttpContext
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Use HttpContext from custom components
|
||||
|
||||
For other framework and custom components that require access to `HttpContext`, the recommended approach is to register a dependency using the built-in [dependency injection](xref:fundamentals/dependency-injection) container. The dependency injection container supplies the `IHttpContextAccessor` to any classes that declare it as a dependency in their constructors.
|
||||
|
||||
::: moniker range=">= aspnetcore-2.1"
|
||||
|
||||
```csharp
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddMvc()
|
||||
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
|
||||
services.AddHttpContextAccessor();
|
||||
services.AddTransient<IUserRepository, UserRepository>();
|
||||
}
|
||||
```
|
||||
|
||||
::: moniker-end
|
||||
|
||||
::: moniker range="<= aspnetcore-2.0"
|
||||
|
||||
```csharp
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddMvc();
|
||||
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||
services.AddTransient<IUserRepository, UserRepository>();
|
||||
}
|
||||
```
|
||||
|
||||
::: moniker-end
|
||||
|
||||
In the preceding example:
|
||||
|
||||
* `UserRepository` declares its dependency on `IHttpContextAccessor`.
|
||||
* The dependency is supplied when dependency injection resolves the dependency chain and creates an instance of `UserRepository`.
|
||||
|
||||
```csharp
|
||||
public class UserRepository : IUserRepository
|
||||
{
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public UserRepository(IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
public void LogCurrentUser()
|
||||
{
|
||||
var username = _httpContextAccessor.HttpContext.User.Identity.Name;
|
||||
service.LogAccessRequest(username);
|
||||
}
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue