Почему [Owin] бросает нулевое исключение в новый проект? - программирование
Подтвердить что ты не робот

Почему [Owin] бросает нулевое исключение в новый проект?

У меня довольно странная проблема, я не уверен, как исправить или могу даже исправить ее.

Я провел некоторое исследование проблемы, но не могу найти ответ на причину этого.

Я следую довольно простому руководству в 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, я получаю следующую ошибку:

Ошибка сервера в приложении "/".

Ссылка на объект не установлена ​​в экземпляр объекта.

Описание: Необработанное исключение произошло во время выполнения текущий веб-запрос. Просмотрите трассировку стека информацию об ошибке и где она возникла в коде.

Сведения об исключении: System.NullReferenceException: ссылка на объект не установленный в экземпляр объекта.

Ошибка источника:

Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.

Трассировка стека:

[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.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(шаг IExecutionStep, Boolean & завершен синхронно) +155

Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.34237

Отключение SSL устраняет проблему, я также знаю, что комментирование startup.auth в app_start устраняет проблему на SSL.

Кто-нибудь знает, почему это происходит?

4b9b3361

Ответ 1

Как и в ответе 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;
            })
    }                
});

Основная проблема для меня заключалась в том, что я изменил модель и забыл добавить новую миграцию.

Ответ 2

Я получал схожую ошибку, но когда я изменил конфигурацию EF из DropCreateDatabaseIfModelChanges < Контекст > в DropCreateDatabaseAlways < Контекст > .

Я не уверен в причине вашей ошибки, но это похоже на проблему в проекте Katana 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 => { }
    }
});

Ответ 3

Выполнение следующих обновлений после создания нового проекта для меня:

пакет обновления Microsoft.Owin

пакет обновления Microsoft.Owin.Security

пакет обновления Microsoft.Owin.Security.Cookies

Думаю, последнего могло быть достаточно. Я использую Visual Studio 2013 (12.0.21005.1) и шаблон ASP.Net Web Application с веб-API.

Ответ 4

Я согласен с тем, что добавление "OnException = context = > {}" разрешает отображение исключений, но следующая ошибка, которую я видел сейчас, может указывать на общую причину и, следовательно, на первый шаг, чтобы попробовать до этого исправления.

Теперь у меня есть сообщение об ошибке, информирующее меня о том, что подстановка модели по контексту изменилась. Это может означать, что попытка Add-Migration и Update-Database может разрешить это для других пользователей ASP.NET Identity, которые сталкиваются с этим, и если это не удается, добавьте строку выше. Это также предложило бы некоторые основные проверки, такие как "Могу ли я подключиться к базе данных?" может также стоить проверить, видно ли это исключение Owin Security. Как только эта ошибка подпоследовательности была исправлена, я мог бы с радостью удалить строку OnException, и сайт все еще работает нормально.

Ответ 5

У меня тоже была эта проблема, и я решил ее очистить, очистив файлы cookie.

Кажется, ваш файл cookie недействителен.

Ответ 6

Причина, по которой это исключение, вероятно, выбрасывается, заключается в том, что возникает проблема с созданием ApplicationDbContext.

В моем случае я добавил Migrations и установил

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

И я начал получать ту же ошибку, что и вы.

Оказалось, что, когда я пытался получить доступ к любому объекту в базе данных, DbContext выдавал ошибку, говоря, что AspNetUsers уже существует, поскольку ранее я запускал свой код без активации миграции, поэтому была создана база данных со всеми правильные таблицы, необходимые для Identity, и как только я сделал EnableMigrations и установил инициализатор, он выдавал ошибку, говоря, что таблица уже существует.

В вашем случае я предполагаю, что есть некоторые основные проблемы с ApplicationDbContext, перед запуском, попробуйте выполнить следующие до Config.Auth методы:

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

Посмотрите, возвращает ли он счет или генерирует исключение.

Ответ 7

Да, у меня была та же проблема, я загрузил базу данных из Azure. Затем я изменяю свое приложение, чтобы использовать это В моем приложении появилось новое поле, отсутствовавшее в лазурной резервной копии Миграции не синхронизированы.

Обновление базы данных (в управлении пакетами с включенными миграциями) сделал трюк.

Ответ 8

Обновление базы данных в консоли диспетчера пакетов сделал трюк для меня

Ответ 9

Эти ответы кажутся полезными и указывают тенденцию, что база данных перепутана. Я получил эту проблему, потому что обновил мою модель и не обновил базу данных. Прямо сейчас я вызываю Add-Migration и Update-Database вручную каждый раз, когда я меняю модель, и прежде чем пытаюсь отладить мой сайт, и я забыл этот шаг.

Ответ 10

очистить файлы cookie localhost. если использовать firefox, см. ссылку . У меня точно такая же ошибка и это решение здесь.

Ответ 11

У меня была такая же проблема, и это произошло потому, что база данных SQL находится за брандмауэром, и вам нужно добавлять свой локальный IP-адрес каждый раз, когда он изменяется.

См. эту ссылку от Microsoft для всех способов сделать это:

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

Ответ 12

Попробуйте удалить Миграцию из проекта

Со мной случилось, как только я включил миграцию базы данных для БД Identity

после удаления всей папки переноса и восстановления проблемы исчезла

это может сработать для вас

Ответ 13

Очистка файла cookie OWIN работала в моем случае.

Ответ 14

После прочтения некоторых ответов, в IE вместо Chrome и отсутствия сбоя, я просто закрыл Chrome и перезапустил приложение. Это сработало.

Ответ 15

я пропустил, чтобы добавить роли в таблице [AspNetRoles]. Это решило проблему.