Я час искал, пытаясь понять, почему это не работает.
У меня есть приложение ASP.Net MVC 5 с WebAPI. Я пытаюсь получить Request.GetOwinContext (). Authentication, однако не могу найти, как включить GetOwinContext. Вот мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using TaskPro.Models;
namespace TaskPro.Controllers.api
{
public class AccountController : ApiController
{
[HttpPost]
[AllowAnonymous]
public ReturnStatus Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var ctx = Request.GetOwinContext(); // <-- Can't find this
return ReturnStatus.ReturnStatusSuccess();
}
return base.ReturnStatusErrorsFromModelState(ModelState);
}
}
}
Из того, что я прочитал, он должен быть частью System.Net.Http, но я включил это, и он все еще не решается. Ctrl-Space также не дает мне никаких опций intellisense.
Что мне здесь не хватает?
c#
asp.net-web-api
owin
Скотти
источник
источник
System.Web.Http
пространстве имен, но изSystem.Web.Http.Owin
dll. Вы упомянули об этом?System.Net.Http
пространство имен. Таким образом, вам не нужно использовать для.Owin
,using System.Net.Http
которое у вас уже есть.Ответы:
Метод
GetOwinContext
расширения находится вSystem.Web.Http.Owin
dll, который необходимо загрузить как пакет nuget (имя пакета nuget - Microsoft.AspNet.WebApi.Owin)См. Msdn здесь: http://msdn.microsoft.com/en-us/library/system.net.http.owinhttprequestmessageextensions.getowincontext(v=vs.118).aspx
Пакет Nuget здесь: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin
Однако метод по-прежнему является частью
System.Net.Http
пространства имен, так чтоusing
определения, которые у вас есть, должны быть в порядке.РЕДАКТИРОВАТЬ
Хорошо, чтобы прояснить некоторую путаницу: если вы используете ApiController (т.е.
MyController : ApiController
), вам потребуетсяMicrosoft.AspNet.WebApi.Owin
пакет.Если вы используете обычный контроллер Mvc (т.е.
MyController : Controller
), вам понадобитсяMicrosoft.Owin.Host.SystemWeb
пакет.В MVC 5 конвейеры для Api и обычного MVC сильно различались, но часто имеют одинаковые соглашения об именах. Таким образом, метод расширения в одном не применим к другому. То же самое для многих фильтров действий и т. Д.
источник
Microsoft.Owin.Host.SystemWeb
неMicrosoft.AspNet.WebApi.Owin
.Microsoft.AspNet.WebApi.Owin
. Если вы используете обычный контроллер MVC, вам понадобитсяMicrosoft.Owin.Host.SystemWeb
.Request
Объект отличается в зависимости от того, какого типа контроллера вы используете так другой метод расширения.У меня ничего из этого не сработало. Мне пришлось сравнить пакеты Nuget с пакетом, созданным с помощью Identity, и я обнаружил, что этот пакет Nuget отсутствует, который при добавлении устранил проблему для меня.
По-видимому, он вам нужен для запуска OWIN в IIS с использованием конвейера запросов ASP.NET (читайте, что вы облажались без него!)
источник
В WEB API вы можете получить ссылку, используя следующее:
он работает в Identity 2.0
источник
Для этого вам может потребоваться добавить пакет NuGet
Microsoft.Owin.Host.SystemWeb
:источник
В моем случае мне нужно добавить
для разрешения GetOwinContext, а затем GetUserManager в следующей строке.
источник
У меня есть эта проблема, и я загружаю дополнительный пакет из nuget, чтобы решить свою проблему (выполните следующую команду в консоли диспетчера пакетов) Install-Package Microsoft.Owin.Host.SystemWeb
источник
Мне потребовалась вечность, чтобы найти простой ответ: но я использовал расширение Get для единственного экземпляра IOwinContext, который был создан при запуске. Так получилось:
источник
(Обратите внимание, что этот ответ предназначен для веб-API ASP.NET, который соответствует тегу, используемому в вопросе. См. Этот вопрос если ваш запрос относится к ASP.NET MVC.)
Вопрос не определяет , как служба ASP.NET Web API должен быть организовано . Диалог в этом сообщении указывает (выделено мной):
В принятом ответе
Microsoft.AspNet.WebApi.Owin
рекомендуется использовать пакет . В этом ответе я сообщаю, что сработало для меня при размещении службы веб-API ASP.NET в IIS. .Сначала установите следующий пакет NuGet:
(Обратите внимание, что на момент написания последней доступной версией этого пакета NuGet является 3.1.0 . Кроме того, насколько это может иметь значение, я использую Visual Studio 2013 Update 5.)
После установки этого пакета NuGet вы можете сделать следующее:
Теперь, чтобы пролить свет на то, как разрешаются эти заявления. Если в Visual Studio щелкнуть правой кнопкой мыши
GetOwinContext
любой оператор и выбрать «Peek Definition», Visual Studio отобразит следующее:Как видите, в
System.Web
пространстве имен есть дваGetOwinContext
метода расширения:HttpContext
классе, иHttpRequest
классу.Опять же, для тех, кто размещает свою службу веб-API в IIS, я надеюсь, что это устранит любую двусмысленность в отношении того, где можно найти определение для
GetOwinContext
этой поздней даты в 2017 году.источник
Метод
GetOwinContext()
расширения не встречается в потоках, кроме потока графического интерфейса.Поэтому будьте осторожны, не вызывайте эту функцию из любой
await
функции ed.источник
Посмотрев на проект по умолчанию ASP.NET, я обнаружил, что мне нужно включить это при запуске моего приложения:
источник
Мне не хватало пакета: Microsoft.AspNet.WebApi.Owin для ApiControllers. Надеюсь это поможет!
источник
У меня была такая же проблема, и я решил ее с помощью частного метода:
private IAuthenticationManager AuthenticationManager { get { return HttpContext.Current.GetOwinContext().Authentication; } }
У меня это сработало.
источник
Мне пришлось добавить пакет
Microsoft.AspNet.Identity.Owin
источник