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

时间:2017-12-14 14:05:00

标签: c# asp.net asp.net-core-2.0 asp.net-2.0

我一直在尝试在ASP.NET MVC和system.web中实现http上下文,它只是允许我使用HttpContext.Current来访问上下文。无论如何,我开始在StartUp类的configureService方法中注入IhttpcontextAccessor。  我发布此帖以查看是否有人使用.Net Core 2.0实现了此功能。 如果是这样,请随时分享知识。提前谢谢。

 services.AddSingleton<HttpContextAccessor, HttpContextAccessor>();

2 个答案:

答案 0 :(得分:8)

如果您需要来自Controller,那么只需使用HttpContext,就像Muqeet的回答所说的那样。

如果您确实需要注入它,那么您使用AddSingleton进入了正确的轨道,但是您有一个小错误:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

注意第一种类型中的I

然后设置你的构造函数:

public class UserService : IUserService {
    private readonly HttpContext _context;

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

然后,您可以在班级的其他任何地方使用context

这是依赖注入的基础知识。 AddSingleton使其可用于注射。然后通过将它添加到构造函数中,在需要的地方询问它。

Maarten在其评论中所附的那篇文章更详细地解释了这一点。

答案 1 :(得分:6)

在控制器

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

实施例

Controller

在服务中

如果您尝试访问服务中的HttpContext对象,那么构造函数会注入[Authorize] public async Task<IActionResult> MySecureAction() { _logger.LogDebug($"Logged in User is {HttpContext.User.Identity.Name}"); return OK(); }

Asp.Net Core 2.1

在即将发布的ASP.NET Core 2.1版本中,将有一个帮助程序扩展方法IHttpContextAccessor可供您正确地将其添加到服务集合中。