如何在.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
供您将其正确添加到服务集合中。
我一直在尝试在 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
供您将其正确添加到服务集合中。