web-dev-qa-db-fra.com

Pourquoi [Owin] lève une exception nulle sur un nouveau projet?

J'ai un problème assez étrange, je ne sais pas comment le résoudre ou si je peux même le résoudre.

J'ai fait des recherches sur le problème, mais je ne trouve pas de réponse à sa cause.

Je suis un guide assez simple sur http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google -oauth2-and-openid-sign-on

et après avoir activé SSL et modifié le controller pour exiger https, j'obtiens l'erreur suivante:

Erreur serveur dans l'application '/'.

La référence d'objet n'est pas définie à une instance d'un objet.

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.NullReferenceException: référence d'objet non définie sur une instance d'un objet.

Erreur source:

Une exception non gérée a été générée lors de l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de pile d'exceptions ci-dessous.

Trace de la pile:

[NullReferenceException: la référence d'objet n'est pas définie sur une instance d'un objet.]
Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider.Exception (contexte CookieExceptionContext) +49
Microsoft.Owin.Security.Cookies.d__2.MoveNext () +3698 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult () +24 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext () System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche de tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +21 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext () Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +21 Microsoft.AspNet.Identity.Owin.d__0.MoveNext. Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +21 Microsoft.AspNet.Identity.Owin.d__0.MoveNext. Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +21 Microsoft.AspNet.Identity.Owin.d__0.MoveNext. Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +21 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5). System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche de tâche) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +21 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.27 +. System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () +22 Microsoft.Owin.Host.SystemWeb.Infrastructure.ErrorState.Rethrow () +33 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End (IAsyncResult ar) +150
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork (IAsyncResult ar) +42
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +415 System.Web.HttpApplication.ExecuteStep (étape IExecutionStep, booléen et terminé de manière synchrone) +155

Informations sur la version: Microsoft .NET Framework Version: 4.0.30319; Version ASP.NET: 4.0.30319.34237

Désactiver SSL résout le problème, je sais également que commenter le startup.auth dans app_start corrige le problème sur SSL.

Quelqu'un sait-il pourquoi cela se produit?

50
micah hawman

Semblable à la réponse de Sandeep, j'ai également mis à jour le fournisseur d'authentification des cookies. Sauf qu'au lieu d'avaler l'erreur, j'ai levé l'exception pour que vous puissiez voir quel était le problème sous-jacent:

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;
            })
    }                
});

Le problème sous-jacent pour moi était que j'avais changé de modèle et oublié d'ajouter une nouvelle migration.

33
Ben Cull

J'obtenais une erreur similaire, mais lorsque j'ai changé la configuration EF de DropCreateDatabaseIfModelChanges <Context> en DropCreateDatabaseAlways <Context>.

Je ne suis pas sûr de la cause de votre erreur, mais cela semble être un problème dans Katana Project https://katanaproject.codeplex.com/workitem/346

Vous pouvez essayer une solution de contournement au lien ci-dessus ou à partir de https://katanaproject.codeplex.com/discussions/565294

C'est ce que j'ai fait dans mon 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 => { }
    }
});
19
Sandeep Kumar

L'exécution des mises à jour suivantes après la création d'un nouveau projet a fonctionné pour moi:

package de mise à jour Microsoft.Owin

package de mise à jour Microsoft.Owin.Security

package de mise à jour Microsoft.Owin.Security.Cookies

Je pense que le dernier aurait pu suffire. J'utilise Visual Studio 2013 (12.0.21005.1) et le modèle Application Web ASP.Net avec API Web.

10
Patrick

Je suis d'accord que l'ajout de "OnException = context => {}" résout l'exception affichée, mais la prochaine erreur que je viens de voir peut suggérer une cause commune, et donc une première étape à essayer avant ce correctif.

J'ai maintenant une erreur m'informant que le support de modèle par contexte a changé. Cela peut signifier que la tentative d'ajout de migration et de mise à jour de la base de données peut résoudre ce problème pour les autres utilisateurs d'identité ASP.NET qui rencontrent ce problème et si cela échoue, ajoutez la ligne ci-dessus. Cela suggérerait également certaines des vérifications de base comme "Puis-je me connecter à la base de données?" peut également être utile de vérifier si vous voyez cette exception Owin Security. Une fois que cette erreur subséquente a été corrigée, je pouvais supprimer la ligne OnException et le site fonctionne toujours bien.

7

J'ai également rencontré ce problème et l'ai résolu en supprimant les cookies.

Il semble que votre cookie ne soit pas valide.

4
BurnOut

Oui, j'ai eu le même problème, j'ai téléchargé une base de données depuis Azure. Je change ensuite mon application pour l'utiliser. Mon application avait un nouveau champ qui n'était pas présent dans la sauvegarde Azure Les migrations n'étaient pas synchronisées.

Update-Database (dans la gestion des packages avec les migrations activées) a fait l'affaire.

2
brianbruff

La raison pour laquelle cette exception est probablement levée est qu'il y a un problème lors de la création de votre ApplicationDbContext.

Dans mon cas, j'ai ajouté Migrations et défini

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

Et j'ai commencé à avoir la même erreur que toi.

Il s'est avéré que lorsque j'ai essayé d'accéder à n'importe quel objet de la base de données, le DbContext lançait une erreur, disant que AspNetUsers existait déjà comme précédemment j'ai exécuté mon code sans migrations activées, donc la base de données a été créée, avec tous les tables correctes nécessaires pour l'identité, et une fois que j'ai fait EnableMigrations et défini un initialiseur, il lançait une erreur en disant que la table existait déjà.

Dans votre cas, je suppose qu'il y a un problème sous-jacent avec ApplicationDbContext, avant le démarrage, essayez ce qui suit avant Les méthodes Config.Auth sont appelées:

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

Voyez s'il retourne le nombre ou lève une exception.

2
Michal Ciechan

Update-Database dans Package Manager Console a fait l'affaire pour moi

2
CMS

effacer les cookies locaux. si vous utilisez Firefox, voyez ceci lien . J'ai exactement la même erreur et cette solution ici .

1
Omid-RH

Ces réponses semblent toutes utiles et indiquent une tendance à la falsification de la base de données. J'ai eu ce problème car j'avais mis à jour mon modèle et je n'avais pas mis à jour la base de données. En ce moment, j'appelle Add-Migration et Update-Database manuellement chaque fois que je change de modèle et avant d'essayer de déboguer mon site et j'avais oublié cette étape.

1
Dan Csharpster

J'ai eu le même problème et cela s'est produit parce que la base de données SQL est derrière un pare-feu et que vous devez ajouter votre adresse IP locale chaque fois qu'elle change.

Voir ce lien de Microsoft pour toutes les façons de le faire:

http://msdn.Microsoft.com/en-us/library/Azure/jj553530.aspx

0
Urik

Après avoir lu quelques réponses, essayé dans IE au lieu de Chrome et vu aucun plantage, je viens de fermer Chrome et j'ai redémarré le Cela a fonctionné.

0
devMomentum

Essayez de supprimer la migration du projet

Je suis arrivé avec moi une fois que j'ai activé la migration de la base de données pour la base de données d'identité

après avoir supprimé l'intégralité du dossier de migration et reconstruit le problème a disparu

ça pourrait marcher pour vous

0
megz

j'ai manqué d'ajouter les rôles dans le tableau [AspNetRoles]. Cela a résolu le problème.

0
Gabriela Macias

La suppression du cookie OWIN a fonctionné dans mon cas.

0
Leon