.NET 6从Framework 4.8升级API项目:RequestContext替代方案咨询
.NET 6中替代
RequestContext.Principal的实现方案 在API控制器中直接获取
ASP.NET Core(含.NET 6)的控制器基类ControllerBase内置了User属性,可直接替代原RequestContext.Principal,代码修改如下:
var tempName = User.Identity.Name;
User属性对应当前请求的用户主体,和原RequestContext.Principal作用完全一致。
在非控制器类中获取(如服务类)
若需在服务类等非控制器场景获取用户信息,需借助IHttpContextAccessor:
- 先在
Program.cs中注册服务:
builder.Services.AddHttpContextAccessor();
- 在目标类中注入
IHttpContextAccessor并使用:
public class YourBusinessService { private readonly IHttpContextAccessor _httpContextAccessor; public YourBusinessService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void ProcessUserInfo() { var httpContext = _httpContextAccessor.HttpContext; if (httpContext != null) { var tempName = httpContext.User.Identity.Name; // 后续逻辑处理 } } }
注意:需处理
HttpContext为null的情况(比如非HTTP触发的后台任务场景)
核心说明
ASP.NET Core摒弃了System.Web.Http相关的旧类型,统一通过HttpContext管理请求上下文,User是HttpContext的核心属性之一,覆盖了原RequestContext.Principal的所有使用场景。过滤器、中间件等场景也可直接访问当前请求的HttpContext对象获取用户信息。
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

