HttpContext 不包含 SignOutAsync 的定义

问题描述 投票:0回答:4

我正在尝试编写一个自定义身份验证管理器,它将处理用户登录和注销以及我的 ASP .Net Core 2.x 应用程序中的许多其他内容,但我首先陷入困境。

我已经尝试了这篇微软文章中建议的方法,但是当我尝试实现登录时,它显示了

HttpContext does not contain a definition for SignOutAsync
错误。我有文章中建议的所有参考资料:

public async void SignIn(HttpContext httpContext, UserDbModel user, bool isPersistent = false)
        {
            ClaimsIdentity identity = new ClaimsIdentity(this.GetUserClaims(user), CookieAuthenticationDefaults.AuthenticationScheme);
            ClaimsPrincipal principal = new ClaimsPrincipal(identity);
            await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme);
        }

下面的代码可以工作,但它已经过时了:

await HttpContext.Authentication.SignOutAsync(...)

课堂参考资料:

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Authentication;

这里缺少什么?也许这些扩展方法在新版本中被删除,如果是这样......我如何以正确的方式实现身份验证?

asp.net asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0
4个回答
12
投票

HttpContext
应该是对
Controller
中字段的引用,并且您不是指类型
HttpContext
。如果情况并非如此,那么这就是问题的原因,请更改代码以使用字段/变量而不是类型。

因此,如果字段名称是

httpContext
,则使用它,因为调用扩展方法是通过引用实例上的方法而不是类型来完成的,因为实例也作为扩展方法的第一个参数传入。

await httpContext.SignInAsync(IdentityConstants.ApplicationScheme);

4
投票

代替

await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme);

应该使用

await httpContext.SignInAsync(IdentityConstants.ApplicationScheme,ClaimsPrincipal.Current);

或者可以使用

await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignInAsync(IdentityConstants.ApplicationScheme,ClaimsPrincipal.Current);

4
投票
    AuthenticationHttpContextExtensions.SignOutAsync(HttpContext, "Cookies");

    AuthenticationHttpContextExtensions
.SignOutAsync(HttpContext, CookieAuthenticationDefaults.AuthenticationScheme);

在控制器中尝试这个


0
投票

就我而言,在略有不同的情况下,我收到了完全相同的错误消息

我的问题是我从

Microsoft.AspNetCore.Http
引用HttpContext,当我从
Microsoft.AspNetCore.Authentication

引用它时问题就消失了
© www.soinside.com 2019 - 2024. All rights reserved.