ASP.NET Identity-HttpContext не имеет метода расширения для GetOwinContext

Я загрузил и успешно запустил ASP.NET образец удостоверения отсюда: https://github.com/rustd/AspnetIdentitySample

Я сейчас в середине реализации ASP.NET Identity framework в моем проекте и столкнулись с проблемой, которая сводила меня с ума весь день...

GetOwinContext() не существует как метод расширения на my HttpContext

я реализую структуру идентификаторов в библиотеке классов. Я установили все последние (предрелизные версии) Identity framework, и все-кроме этого-работает нормально.

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

мне явно не хватает ссылки где-то, хотя я понятия не имею, что..!..

код-блок, который убивает меня это:

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 Я могу найти метод, однако, когда я ищу его в своем решении, его нигде нет находиться... У меня, должно быть, какая-то устаревшая библиотека, но я не могу ее найти!

8 ответов


Аргх!

Я нашел его... У меня не было дополнительного пакета, называемого Microsoft.Owin.Host.SystemWeb

как только я искал и установил это, это сработало.

теперь-я не уверен, что я просто пропустил все, хотя не нашел ссылки на такую библиотеку или пакет при прохождении различных учебных пособий. Он также не был установлен, когда я установил всю эту структуру идентификации... Не уверен, что это был только я..

редактировать Хотя он внутри the Microsoft.Owin.Host.SystemWeb сборка это метод расширения в System.Web пространство имен, поэтому вам нужно иметь ссылку на первое и быть using последнего.


Я считаю, что вам нужно ссылаться на текущий HttpContext Если вы находитесь вне контроллера. Контроллеры MVC имеют базовую ссылку на текущий контекст. Однако, помимо этого, вы должны явно объявить, что хотите текущий HttpContext

return HttpContext.Current.GetOwinContext().Authentication;

что касается того, что он не отображается, новый шаблон проекта MVC 5 с использованием кода, который вы показываете выше (IAuthenticationManager) имеет следующие операторы using в верхней части контроллера учетных записей:

using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using WebApplication2.Models;

закомментировав каждый из них, похоже,GetOwinContext() на самом деле является частью системы.Сеть.Сборка Mvc.


после проб и ошибок сравнения операторов using моего контроллера и Asp.Net контроллер шаблонов

using System.Web;

решил проблему для меня. Вам также нужно будет добавить:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;

для использования метода GetUserManager.

Microsoft не удалось найти способ решить эту проблему автоматически с помощью щелчка правой кнопкой мыши и решить, как и другие отсутствующие операторы using?


в моем случае при добавлении Microsoft.сеть САШ.Веб-API.Оуин!--2--> refference через nuget сделал трюк.


убедитесь, что вы установили пакет NuGet Microsoft.AspNet.Identity.Owin. Затем добавьте System.Net.Http пространство имен.


просто используя

HttpContext.Текущий.GetOwinContext ()

сделал трюк в моем случае.


У меня были все правильные пакеты и использования, но сначала нужно было построить, прежде чем я мог получить GetOwinContext() на работу.


чтобы получить UserManager в API

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();

где AppUserManager-класс, наследуемый от UserManager.