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

Ответ 1

ARGH!

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

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

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

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

Ответ 2

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

Ответ 3

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

using System.Web;

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

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

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

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

Ответ 4

В моем случае добавление ссылки Microsoft.AspNet.WebApi.Owin через nuget помогло.

Ответ 5

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

Ответ 6

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

HttpContext.Current.GetOwinContext()

сделал свое дело в моем случае.

Ответ 7

Для разработчиков, получающих эту ошибку в Web API Project -

Метод расширения GetOwinContext определен в dll System.Web.Http.Owin и потребуется еще один пакет, т.е. Microsoft.Owin.Host.SystemWeb. Этот пакет должен быть установлен в вашем проекте из nuget.

Ссылка на пакет: Команда установки пакета OWIN -

Install-Package Microsoft.AspNet.WebApi.Owin    

Ссылка на пакет System.web: команда установки пакета -

Install-Package Microsoft.Owin.Host.SystemWeb

Чтобы устранить эту ошибку, вам необходимо выяснить причину ее возникновения в вашем случае. Пожалуйста, проверьте ниже пункты в вашем коде -

  1. У вас должна быть ссылка на Microsoft.AspNet.Identity.Owin;

    использование Microsoft.AspNet.Identity.Owin;

  2. Определите GetOwinContext() HttpContext.Current как HttpContext.Current ниже -

     return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
    

    ИЛИ ЖЕ

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
    

Полный код, где используется GetOwinContext() -

 public ApplicationSignInManager SignInManager
 {
   get
   {
    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
   }
    private set
    {
     _signInManager = value;
    }
  }

Я использую пространство имен в файле кода, где используется GetOwinContext()

using AngularJSAuthentication.API.Entities;
using AngularJSAuthentication.API.Models;
using HomeCinema.Common;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security.DataProtection;

Я получил эту ошибку при перемещении моего кода из одного проекта в другой.

Ответ 8

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

Ответ 9

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

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

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