如何在.net core 2.0 中实现HttpContext?

How to implement HttpContext in .net core 2.0?

我一直在尝试在 ASP.NET MVC 和 system.web 中实现 http 上下文,它只会允许我使用 HttpContext.Current 访问上下文。不管怎样,我首先在 StartUp Class 的 configureService 方法中注入了 IhttpcontextAccessor。 我发布这个是为了看看是否有人使用 .Net Core 2.0 实现了这个。 如果是这样,请随时分享知识。提前致谢。

 services.AddSingleton<HttpContextAccessor, HttpContextAccessor>();

如果您需要从控制器获取它,那么只需使用 HttpContext,正如 Muqeet 的回答所说。

如果您确实需要注入它,那么您在 AddSingleton 的正确轨道上,但您有一个轻微的错字:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

注意第一个类型中的I

然后设置你的构造函数:

public class UserService : IUserService {
    private readonly HttpContext _context;

    public UserService(IHttpContextAccessor httpContextAccessor) {
        _context = httpContextAccessor.HttpContext;
    }
}

然后您可以在 class 中的任何其他地方使用 context

这就是依赖注入的基础知识。 AddSingleton 使其可用于注入。然后你通过将它添加到你的构造函数来在你需要它的地方请求它。

Maarten 在他的评论中链接到的那篇文章解释得更详细。

在控制器中

查看您的代码示例,您似乎正试图在控制器中获取 HttpContext 信息。您不需要 注入 HttpContextAccessor,因为 HttpContext 已经作为 Controller 上的 属性 可供您使用。您可以像使用其他任何东西一样使用它 属性.

例子

[Authorize]
public async Task<IActionResult> MySecureAction()
{
   _logger.LogDebug($"Logged in User is {HttpContext.User.Identity.Name}");
   return OK();
}

在服务中

如果您试图访问服务中的 HttpContext 对象,那么您将在构造函数中注入 IHttpContextAccessor.

Asp.Net 核心 2.1

在即将发布的 ASP.NET Core 2.1 版本中,将提供辅助扩展方法 AddHttpContextAccessor 供您将其正确添加到服务集合中。