为什么[Owin]在新项目上抛出一个null异常

本文关键字:一个 异常 null Owin 新项目 为什么 | 更新日期: 2023-09-27 18:26:15

我有一个相当奇怪的问题,我不知道如何解决,也不知道是否可以解决。

我对这个问题做了一些研究,但找不到原因的答案。

我遵循一个相当简单的指南http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on

在启用SSL并将controller更改为要求https后,我得到以下错误:

"/"应用程序中的服务器错误。

对象引用未设置为对象的实例。

描述:在执行期间发生未处理的异常当前web请求。请查看堆栈跟踪以了解更多信息有关错误的信息以及错误在代码中的来源。

异常详细信息:System.NullReferenceException:对象引用不是设置为对象的实例。

来源错误:

在执行期间生成了未处理的异常当前web请求。关于可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[NullReferenceException:对象引用未设置为对象。]
Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider.Exception(CookieExceptionContext上下文)+49
Microsoft.Owin.Security.Cookies.d_2.MoveNext()+3698 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()+24 Microsoft.Owin.Security.Infrastructure.d_0.MoveNext()+810 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter.GetResult()+21 Microsoft.Owin.Security.Infrastructure.d_0.MoveNext()+427 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter.GetResult()+21 Microsoft.AspNet.Identity.Owin.d_0.MoveNext()+641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter.GetResult()+21 Microsoft.AspNet.Identity.Owin.d_0.MoveNext()+641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter.GetResult()+21 Microsoft.AspNet.Identity.Owin.d_0.MoveNext()+641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter.GetResult()+21 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d_5.MoveNext()+287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task)+52 System.Runtime.CompilerServices.TaskAwaiter.GetResult()+21 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.MoveNext()+272 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()+22 Microsoft.Owin.Host.SystemWeb.Infrastructure.ErrorState.Rethow()+33Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResultar)+150
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPiplineContext.EndFinalWork(IAsyncResultar)+42
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+415 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,Boolean和completedSynchronously)+155

版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.34237

关闭SSL可以解决问题,我还知道在app_start中注释掉startup.auth可以解决SSL上的问题。

有人知道为什么会发生这种事吗

为什么[Owin]在新项目上抛出一个null异常

与Sandeep的回答类似,我也更新了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<ApplicationUserManager, User>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
            /* I changed this part */
            OnException = (context =>
            {
                throw context.Exception;
            })
    }                
});

对我来说,根本的问题是我改变了模型,忘记添加新的迁移。

我收到了类似的错误,但当我从DropCreateDatabaseIfModelChanges<上下文>到DropCreateDatabaseAlways<上下文>。

我不确定你的错误原因,但这似乎是卡塔纳项目中的一个问题https://katanaproject.codeplex.com/workitem/346

您可以在上面的链接或https://katanaproject.codeplex.com/discussions/565294

这就是我在StartUp.Auth.cs 中所做的

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider
    {
           OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, User>(
            validateInterval: TimeSpan.FromMinutes(1),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
           //**** This what I did ***//
            OnException = context => { }
    }
});

创建新项目后运行以下更新对我有效:

更新包Microsoft.Owin

更新包Microsoft.Owin.Security

更新包Microsoft.Owin.Security.Cookies

我认为最后一个可能已经足够了。我使用的是Visual Studio 2013(12.0.21005.1)和ASP.Net Web应用程序模板以及Web API

我同意添加"OnException=context=>{}"可以解决显示的异常,但我刚才看到的下一个错误可能表明了一个常见的原因,因此是在修复之前尝试的第一步。

我现在有一个错误,通知我上下文支持的模型已经更改。这可能意味着,尝试添加迁移和更新数据库可能会为遇到此问题的其他ASP.NET Identity用户解决此问题,如果失败,则添加上面的行。这也表明,如果您看到Owin Security异常,一些基本检查,如"我可以连接到数据库吗?"也可能值得检查。一旦这个子序列错误被修复,我可以很高兴地删除OnException行,并且网站仍然运行良好。

我也遇到了这个问题,并通过清除cookie解决了这个问题。

你的cookie似乎无效。

引发此异常的原因可能是创建ApplicationDbContext时出现问题。

在我的案例中,我添加了迁移,并设置了

        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());

我开始犯和你一样的错误。

事实证明,当我试图访问数据库中的任何对象时,DbContext抛出了一个错误,说AspNetUsers已经存在,就像以前一样。我在没有启用迁移的情况下运行代码,因此创建了数据库,其中包含了Identity所需的所有正确表,它抛出了一个错误,表示表已经存在。

在您的情况下,我猜测ApplicationDbContext存在一些潜在问题,在启动之前,请在调用Config.Auth方法之前尝试以下

        var ctx = new ApplicationDbContext(...);
        var count = ctx.Users.Count();

看看它是返回计数还是抛出异常。

是的,我遇到了同样的问题,我从Azure下载了一个数据库。然后我更改我的应用程序以使用此我的应用程序有一个不在azure备份中的新字段迁移不同步。

更新数据库(在启用迁移的包管理中)做到了这一点。

在Package Manager控制台中更新数据库

这些答案似乎都很有帮助,并表明数据库有混乱的趋势。我遇到这个问题是因为我已经更新了我的模型,但没有更新数据库。现在,每当我更改模型时,以及在尝试调试我的网站之前,我都会手动调用添加迁移和更新数据库,但我忘记了这一步。

清除localhost cookie。如果使用firefox,请查看此链接。我有同样的错误和这个解决方案。

我也遇到了同样的问题,因为SQL数据库位于防火墙后面,每次更改时都需要添加本地IP。

请参阅微软的链接,了解实现这一点的所有方法:

http://msdn.microsoft.com/en-us/library/azure/jj553530.aspx

在我的情况下清除OWIN cookie是有效的。

在阅读了一些答案后,尝试了IE而不是Chrome,但没有发现崩溃,我只是关闭了Chrome并重新启动了应用程序。它奏效了。

我没有在表[AspNetRoles]中添加角色。这解决了问题。

原因也可能是编译和运行应用程序的.Net Framework版本不同。只需在web.config中明确指定版本:

<httpRuntime ...... targetFramework="4.6.1" />
<compilation ...... targetFramework="4.6.1" />

尝试从项目中删除迁移,一旦我为Identity DB 启用了数据库迁移,就会发生这种情况

删除整个迁移文件夹并重建后问题消失

它可能适用于