HttpContext 重大调整
在 ASP.NET
的时代,我们通常通过 HttpContext
全局静态类获取请求上下文,但在 ASP.NET Core
中,HttpContext
是一个非静态的抽象类,无法手动创建,也无法通过静态获取。
虽然在 ASP.NET Core
中无法直接获取 HttpContext
对象。但是微软也提供了注入 IHttpContextAccessor
方式获取。
HttpContext 多种获取方式
在 ControllerBase
派生类中
在 ControllerBase
派生类中,我们可以直接通过 HttpContext
属性获取 HttpContext
对象。
通过注入 IHttpContextAccessor
在 Furion
框架中,默认已经注册了 IHttpContextAccessor
服务,所以我们可以通过构造函数注入该对象获取。
public class AppService
{
public AppService(IHttpContextAccessor httpContextAccessor)
{
var httpContext = httpContextAccessor.HttpContext;
}
}
通过 App.HttpContext
App
静态类也提供了 App.HttpContext
获取 HttpContext
对象。
HttpContext
拓展方法
Furion
框架也提供了一些常用的 HttpContext
拓展方法
获取当前请求的特性
var attribute = httpContext.GetMetadata<SomeAttribute>();
设置 Swagger
自动授权
httpContext.SigninToSwagger("你的token");
退出 Swagger
授权
httpContext.SignoutToSwagger();
获取本地 IP 地址
var ipv4 = httpContext.GetLocalIpAddressToIPv4();
var ipv6 = httpContext.GetLocalIpAddressToIPv6();
获取客户端 IP 地址
var ipv4 = httpContext.GetRemoteIpAddressToIPv4();
var ipv6 = httpContext.GetRemoteIpAddressToIPv6();