C# SignInManager在尝试登录时抛出null

C# SignInManager在尝试登录时抛出null,c#,asp.net,asp.net-mvc-4,owin,asp.net-identity-2,C#,Asp.net,Asp.net Mvc 4,Owin,Asp.net Identity 2,我正在实现asp.net标识。我用int主键而不是默认的字符串覆盖了默认类。我是按照以下文章这样做的: 对不起,所有的代码,但我已经被困在这个愚蠢的错误有一段时间了,所以我宁愿给更多的信息,而不是更少 我有以下课程: public class FskUser : IdentityUser<int, FskUserLogin, FskUserRole, FskUserClaim> { ... public async Task<ClaimsIdentity>

我正在实现asp.net标识。我用
int
主键而不是默认的
字符串
覆盖了默认类。我是按照以下文章这样做的:

对不起,所有的代码,但我已经被困在这个愚蠢的错误有一段时间了,所以我宁愿给更多的信息,而不是更少

我有以下课程:

public class FskUser : IdentityUser<int, FskUserLogin, FskUserRole, FskUserClaim>
{
    ...
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<FskUser, int> manager)
    {
                    // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}
公共类FskUser:IdentityUser
{
...
公共异步任务GenerateUserIdentityAsync(用户管理器)
{
//注意authenticationType必须与CookieAuthenticationOptions.authenticationType中定义的类型匹配
var userIdentity=wait manager.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
//在此处添加自定义用户声明
返回用户身份;
}
}
我的自定义签名管理员

  public class FskSignInManager : SignInManager<FskUser,int>
{
    public FskSignInManager(FskUserManager userManager, IAuthenticationManager authenticationManager)
        : base(userManager, authenticationManager)
    {
    }

    public override Task<ClaimsIdentity> CreateUserIdentityAsync(FskUser user)
    {
        return user.GenerateUserIdentityAsync((FskUserManager)UserManager);
    }

    public static FskSignInManager Create(IdentityFactoryOptions<FskSignInManager> options, IOwinContext context)
    {
        return new FskSignInManager(context.GetUserManager<FskUserManager>(), context.Authentication);
    }
}
公共类FskSignInManager:SignInManager
{
公共FskSignInManager(FskUserManager用户管理器、IAAuthenticationManager authenticationManager)
:base(userManager、authenticationManager)
{
}
公共覆盖任务CreateUserIdentityAsync(FskUser用户)
{
返回user.GenerateUserIdentityAsync((FskUserManager)UserManager);
}
公共静态FskSignInManager创建(IdentityFactoryOptions选项,IOwinContext上下文)
{
返回新的FskSignInManager(context.GetUserManager(),context.Authentication);
}
}
My StartUp.Auth.cs

 public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context, user manager and signin manager to use a single instance per request
        app.CreatePerOwinContext(IdentityDbContext.Create);
        app.CreatePerOwinContext<FskUserManager>(FskUserManager.Create);
        app.CreatePerOwinContext<FskSignInManager>(FskSignInManager.Create);

        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        // Configure the sign in cookie
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                // Enables the application to validate the security stamp when the user logs in.
                // This is a security feature which is used when you change a password or add an external login to your account.  
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<FskUserManager, FskUser, int>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentityCallback: (manager, user) =>
                user.GenerateUserIdentityAsync(manager),
            getUserIdCallback: (id) => (id.GetUserId<int>()))                   
            }
        });            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);       
           }
public void ConfigureAuth(IAppBuilder应用程序)
{
//将数据库上下文、用户管理器和登录管理器配置为每个请求使用一个实例
app.CreatePerOwinContext(IdentityDbContext.Create);
app.CreatePerOwinContext(FskUserManager.Create);
app.CreatePerOwinContext(fsksignnmanager.Create);
//使应用程序能够使用cookie存储登录用户的信息
//以及使用cookie临时存储用户登录第三方登录提供商的信息
//配置登录cookie
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Account/Login”),
Provider=新CookieAuthenticationProvider
{
//允许应用程序在用户登录时验证安全戳。
//这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(
validateInterval:TimeSpan.FromMinutes(30),
regenerateIdentityCallback:(管理者,用户)=>
user.GenerateUserIdentityAsync(管理器),
getUserIdCallback:(id)=>(id.GetUserId())
}
});app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
这是我的帐户控制器:

 [Authorize]
public class AccountController : Controller
{
    private FskSignInManager _signInManager;
    private FskUserManager _userManager;

    public AccountController()
    {
    }

    public AccountController(FskUserManager userManager, FskSignInManager signInManager)
    {
        UserManager = userManager;
        SignInManager = signInManager;
    }

    public FskSignInManager SignInManager
    {
        get
        {
            if (_signInManager == null)
            {
                //split for debug purposes
                var cntx = HttpContext.GetOwinContext();
                var tmp = cntx.Get<FskSignInManager>();
                return tmp;
            }
            else
            {
                return _signInManager;
            }
        }
        private set
        {
            _signInManager = value;
        }
    }

    public FskUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<FskUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

    //
    // POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        *** line below causes the error ***            
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
        }
    }
 }
[授权]
公共类AccountController:控制器
{
私人FskSignInManager(U signInManager);
私有FskUserManager(u userManager);
公共账户控制员()
{
}
公共帐户控制器(FskUserManager用户管理器、FskSignInManager符号管理器)
{
UserManager=UserManager;
SignInManager=SignInManager;
}
公共FskSignInManager SignInManager
{
得到
{
if(_signInManager==null)
{
//为调试目的而拆分
var cntx=HttpContext.GetOwinContext();
var tmp=cntx.Get();
返回tmp;
}
其他的
{
返回-签名管理器;
}
}
专用设备
{
_signInManager=值;
}
}
公共FskUserManager用户管理器
{
得到
{
返回_userManager??HttpContext.GetOwinContext().GetUserManager();
}
专用设备
{
_userManager=value;
}
}
//
//POST:/帐户/登录
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
***下面的行导致错误***
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:
返回重定向到本地(returnUrl);
案例标志状态锁定输出:
返回视图(“锁定”);
案例标志状态。要求验证:
return RedirectToAction(“SendCode”,new{ReturnUrl=ReturnUrl,RememberMe=model.RememberMe});
案例信号状态故障:
违约:
AddModelError(“,”登录尝试无效“);
返回视图(模型);
}
}
}
这是我尝试登录时收到的错误消息:

    Value cannot be null.
    Parameter name: value 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: value

    Source Error: 

    Line 80: 
    Line 81:             // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
    Line 82:             var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
    Line 83:             // Add custom user claims here
    Line 84:             return userIdentity;  

   Source File:  c:\Users\Dylan.AMECOR\Dropbox\Work\Code\FSK Networks Website\FSK.Domain.Repository\Services\Shared\Security\FskUser.cs    Line:  82 
    Stack Trace: 
    [ArgumentNullException: Value cannot be null.
    Parameter name: value]
     System.Security.Claims.Claim..ctor(String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue) +10798181
   System.Security.Claims.Claim..ctor(String type, String value) +34
   Microsoft.AspNet.Identity.<CreateAsync>d__0.MoveNext() +1447
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   FSK.Domain.Services.Services.Shared.<GenerateUserIdentityAsync>d__0.MoveNext() in c:\Users\Dylan.AMECOR\Dropbox\Work\Code\FSK Networks Website\FSK.Domain.Repository\Services\Shared\Security\FskUser.cs:82
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +123
   Microsoft.AspNet.Identity.Owin.<SignInAsync>d__2.MoveNext() +408
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21
   Microsoft.AspNet.Identity.CultureAwaiter.GetResult() +63
   Microsoft.AspNet.Identity.Owin.<SignInOrTwoFactor>d__23.MoveNext() +1910
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93     System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
    System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +67
   Microsoft.AspNet.Identity.Owin.<PasswordSignInAsync>d__29.MoveNext() +2208
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93        System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
    System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   FSK.WebSite.Web.Controllers.<Login>d__2.MoveNext() in c:\Users\Dylan.AMECOR\Dropbox\Work\Code\FSK Networks Website\FSK.WebSite.Web\Controllers\AccountController.cs:86
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93          System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
    System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21
    System.Threading.Tasks.TaskHelpersExtensions.ThrowIfFaulted(Task task) +61
    System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +114
    System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +66
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +117
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +323
    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +44
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102              System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +72
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
       System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +129
值不能为空。
参数名称:value
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。
异常详细信息:System.ArgumentNullException:值不能为null。
参数名称:value
源错误:
第80行:
第81行://注意authenticationType必须与CookieAuthenticationOptions.authenticationType中定义的类型匹配
第82行:var userIdentity=wait manager.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
第83行:
user.Claims.Add(new IdentityUserClaim<string>
            {
                ClaimType = item.Key,
                ClaimValue = item.Value
            });
user.Claims.Add(new IdentityUserClaim<string>
            {
                ClaimType = item.Key,
                ClaimValue = item.Value != null ? item.Value : ""
            });
await userManager.AddToRoleAsync(user, UserRoles.Basic.ToString());