Почему [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
.
Кто-нибудь знает, почему это происходит?
Ответы
Ответ 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]. Это решило проблему.