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

265

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

Теги:
asp.net-mvc
asp.net-identity

7 ответов

501
Лучший ответ

ARGH!

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

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

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

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

  • 6
    Спасибо, что выяснили это: я использую этот учебник asp.net/identity/overview/getting-started/…, и этот шаг пропущен
  • 0
    Кажется, он сейчас там - либо это, либо мы оба пропустили это раньше :)
Показать ещё 19 комментариев
133

Я считаю, что вам нужно ссылаться на текущий 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.

  • 0
    Пробовал это и просто не могу найти это. - GetOwinContext () я имею в виду.
  • 2
    @Darren - Я немного поиграл с образцом шаблона и, возможно, вам не хватает сборки. Похоже, вам нужно будет ссылаться на System.Web.Mvc из вашего проекта класса. Когда это закомментировано, это то, что заставило HttpContext.GetOwinContext() стать неизвестным (а не сборкой Microsoft.Owin.Security )
Показать ещё 6 комментариев
17

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

using System.Web;

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

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

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

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

  • 1
    Это сработало и для меня. У меня уже были библиотеки Identity, но, похоже, нужен System.Web.
  • 1
    По-видимому, это происходит очень часто, как в сборках, так и в пространствах имен. Делает это действительно болезненным, потому что это метод расширения. Я обновил все свои библиотеки, и этот ответ отражает, где он находится в данный момент.
Показать ещё 2 комментария
12

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

  • 0
    Да, это было сделано для меня в текущей последней версии. Метод расширения находится в этом пакете, который является сборкой System.Web.Http.Owin и внутри пространства имен System.Net.Http.
10

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

  • 0
    У меня был тот тоже. Оказывается, там была еще одна библиотека, НЕ установленная, когда был установлен компонент Identity.
  • 0
    @Darren Пожалуйста, добавьте название пакета. Спасибо
Показать ещё 2 комментария
1

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

  • 0
    Как вы исправили свою сборку, чтобы она работала с первого раза?
  • 0
    @Nordes Иногда VS не удается собрать в фоновом режиме (то есть: он сообщает вам, что есть ошибки компиляции), но запуск реальной сборки (или чаще очистка, а затем сборка) поможет. Скорее всего, это пережил Кевин.
0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню