Я скачал и успешно запустил образец удостоверения ASP.NET отсюда: https://github.com/rustd/AspnetIdentitySample
Сейчас я нахожусь в процессе реализации ASP.NET Identity Framework в моем проекте и столкнулся с проблемой, которая приводила меня в бешенство весь день ...
GetOwinContext()
не существует в качестве метода расширения на моемHttpContext
Я реализую структуру идентичности в библиотеке классов. Я установил все последние (предварительные версии) платформы Identity, и все - кроме этого - работает нормально.
Я попытался реализовать тот же код, что и тот же прямой в моем контроллере, и обнаружил ту же проблему.
Я явно пропускаю ссылку где-то, хотя понятия не имею, что ..! ..
Блок кода, который убивает меня:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Я добавил ссылки на следующее - пробовал их как в моей библиотеке классов, так и непосредственно на контроллере, ни одна из них не работает для меня ...
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
... это доводит меня до стены ... есть идеи?
ОБНОВИТЬ
Я проверил версии Identity & OWIN в образце и убедился, что в моем решении есть те же версии.
Более того, если я поищу в браузере объектов образец, GetOwinContext
я смогу найти метод, однако, когда я ищу его в своем решении, его нигде не найти ... У меня должна быть какая-то библиотека устаревшая, но я не могу ' не найти это!
источник
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
(Текущий включен там, где его не было в вопросе).Я считаю, что вам нужно ссылаться на ток,
HttpContext
если вы находитесь за пределами контроллера. Контроллеры MVC имеют базовую ссылку на текущий контекст. Однако, помимо этого, вы должны явно объявить, что хотите текущийHttpContext
Что касается того, что он не отображается, новый шаблон проекта MVC 5, использующий код, показанный выше (
IAuthenticationManager
), имеет следующие операторы использования в верхней части контроллера учетных записей:Закомментируя каждый, он, по-видимому,
GetOwinContext()
является частью сборки System.Web.Mvc.источник
System.Web.Mvc
из вашего проекта класса. Когда закомментировано, это то, что заставилоHttpContext.GetOwinContext()
стать неизвестным (а неMicrosoft.Owin.Security
сборка)HttpContext
наController
классе, так что если вы унаследовали от того,HttpContext.GetOwinContext()
работает , как ожидалось. Если вы наследуете от этогоApiController
, такого свойства не существует. Следовательно,HttpContext
будет ссылаться на класс, который вам потребуется использоватьCurrent
для доступа к экземпляру класса. Поэтому, если вы копируете / вставляете код из контроллера в ApiController и удивляетесь, почему он не работает, это ответ для вас.После проб и ошибок сравнивая операторы используя мой контроллер и контроллер шаблона Asp.Net
Решил проблему для меня. Вы также должны будете добавить:
Использовать метод GetUserManager.
Microsoft не может найти способ решить это автоматически с помощью щелчка правой кнопкой мыши и решить, как другие пропущенные с помощью операторов?
источник
В моем случае добавление ссылки Microsoft.AspNet.WebApi.Owin через nuget помогло.
источник
Убедитесь, что вы установили пакет nuget
Microsoft.AspNet.Identity.Owin
. Затем добавьтеSystem.Net.Http
пространство имен.источник
Microsoft.Owin.Host.SystemWeb
все же сработало.Просто используя
сделал свое дело в моем случае.
источник
Для разработчиков, получающих эту ошибку в Web API Project -
Метод расширения GetOwinContext определен в
System.Web.Http.Owin
dll, и потребуется еще один пакет, т.е.Microsoft.Owin.Host.SystemWeb
. Этот пакет должен быть установлен в вашем проекте из nuget.Ссылка на пакет : Команда установки пакета OWIN -
Ссылка на пакет System.web : команда установки пакета -
Чтобы устранить эту ошибку, вам необходимо выяснить причину ее возникновения в вашем случае. Пожалуйста, проверьте ниже пункты в вашем коде -
Вы должны иметь ссылку на
Microsoft.AspNet.Identity.Owin;
использование Microsoft.AspNet.Identity.Owin;
Определить
GetOwinContext()
подHttpContext.Current
как ниже -ИЛИ
Полный код, где используется GetOwinContext () -
Пространство имен, которое я использую в файле кода, где используется GetOwinContext ()
Я получил эту ошибку при перемещении моего кода из одного проекта в другой.
источник
Получить UserManager в API
где AppUserManager - это класс, который наследуется от UserManager.
источник
У меня были все правильные пакеты и использование, но мне пришлось сначала собрать их, прежде чем я смог приступить
GetOwinContext()
к работе.источник
Просто установите этот пакет, и ваш код будет работать: => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
источник