Идентификатор 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
Чтобы устранить эту ошибку, вам необходимо выяснить причину ее возникновения в вашем случае. Пожалуйста, проверьте ниже пункты в вашем коде -
-
У вас должна быть ссылка на Microsoft.AspNet.Identity.Owin;
использование Microsoft.AspNet.Identity.Owin;
-
Определите 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.