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

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

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

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;

... это подталкивает меня к стене... любая идея?

UPDATE

Я проверил версии Identity и OWIN в образце, и я убедился, что у меня есть те же версии в моем решении.

Более того, если я ищу браузер объектов на образце для GetOwinContext, я могу найти этот метод, однако, когда я его ищу в своем решении, его не найти... Я должен иметь некоторую библиотеку из дата, но я не могу ее найти!

265
16 янв. '14 в 0:07
источник поделиться
7 ответов

ARGH!

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

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

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

ИЗМЕНИТЬ Хотя это в сборке Microsoft.Owin.Host.SystemWeb, это метод расширения в пространстве имен System.Web, поэтому вам нужно иметь ссылку на первое и быть using последним.

527
16 янв. '14 в 0:32
источник

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

return HttpContext.Current.GetOwinContext().Authentication;

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

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() на самом деле является частью сборки System.Web.Mvc.

133
16 янв. '14 в 0:09
источник

После проб и ошибок, сравнивающих операторы использования моего контроллера и контроллера шаблона Asp.Net

using System.Web;

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

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

Использовать метод GetUserManager.

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

17
30 янв. '15 в 0:14
источник

в моем случае добавление Microsoft.AspNet.WebApi.Owin refference через nuget сделал трюк.

12
01 дек. '15 в 14:59
источник

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

10
16 янв. '14 в 0:29
источник

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

1
06 марта '15 в 4:52
источник

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

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

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

0
09 мая '17 в 15:57
источник

Посмотрите другие вопросы по меткам или Задайте вопрос