gpt4 book ai didi

c# - 在 Controller 外使用 HttpContext

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:28 27 4
gpt4 key购买 nike

public class UserAccount
{
private readonly IHttpContextAccessor _httpContextAccessor;

public UserAccount(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}

//Sign in
public static async Task SignIn(dynamic user)
{
var claims = new[]
{
new Claim("UserID", user.ID.ToString()),
new Claim(ClaimTypes.Role, "Baller")
};

var principal = new ClaimsPrincipal(
new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme));

await _httpContextAccessor.HttpContext.Authentication.SignInAsync("Cookies", principal);
}
}

我从 SignIn 方法中的 await 语句中收到此错误:非静态字段、方法或属性“UserAccount._httpContextAccessor”需要对象引用

如果我不将该方法声明为静态,错误就会消失,但是如果方法 ISN 未声明为静态,我无法从我的 Controller 访问方法 UserAccount.SignIn。

如果我这样声明变量 _httpContextAccessor:

private static IHttpContextAccessor

而不是:

private readonly IHttpContextAccessor

所有错误都消失了,但我在 await 语句中再次遇到空引用异常。 (_httpContextAccessor 未设置为对象的实例)

最佳答案

我认为您打算查看当前 HttpContext。为此,您需要将 IHttpContextAccessor 的依赖项添加到您的 Controller 构造函数,然后在您的操作方法中使用该接口(interface)的 HttpContext 属性来访问当前上下文。

您可能需要注册

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

在您的 Startup.cs 中,取决于您是否已将此服务添加到可能依赖它的其他常见服务。

关于c# - 在 Controller 外使用 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731686/

27 4 0
文章推荐: c# - 通过 C# 将 NULL 值传递给存储过程
文章推荐: javascript - 通过不同尺寸的div显示X
文章推荐: css - 从
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com