我正在尝试编写一个自定义身份验证管理器,该程序将处理我的ASP .Net Core 2.x应用程序中的用户登录和注销以及许多其他内容,但我始终处于困境。
我尝试了this Microsoft Article中建议的方式,但是当我尝试实现登录时,它显示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;
这里缺少什么?也许这些扩展方法已在新版本中删除,如果是的话...我如何以正确的方式实现身份验证?
最佳答案
HttpContext
应该是对Controller
中的字段的引用,而不是对HttpContext
类型的引用。如果不是这种情况,那就是导致问题的原因,请更改代码以使用字段/变量而不是类型。
因此,如果字段名称是httpContext
,则使用该名称作为扩展方法是通过引用实例上的方法来完成的,而不是类型,因为实例也作为扩展方法的第一个参数传入。
await httpContext.SignInAsync(IdentityConstants.ApplicationScheme);
关于asp.net - HttpContext不包含SignOutAsync的定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49012752/