Estou procurando há uma hora tentando descobrir por que isso não está funcionando.
Eu tenho um aplicativo ASP.Net MVC 5 com um WebAPI. Estou tentando obter Request.GetOwinContext (). Authentication, mas não consigo descobrir como incluir GetOwinContext. Aqui está o meu código:
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);
}
}
}
Pelo que li, deve ser parte do System.Net.Http, mas incluí isso e ainda não está resolvendo. Ctrl-Espaço também não me dá nenhuma opção de intellisense.
O que estou perdendo aqui?
c#
asp.net-web-api
owin
Scottie
fonte
fonte
System.Web.Http
namespace, mas é daSystem.Web.Http.Owin
dll. Você fez referência a isso?System.Net.Http
namespace. Então você não precisa usar o for.Owin
, apenas ousing System.Net.Http
que você já tem.Respostas:
O
GetOwinContext
método de extensão está naSystem.Web.Http.Owin
dll, que precisa ser baixado como um pacote nuget (o nome do pacote nuget é Microsoft.AspNet.WebApi.Owin)Veja o msdn aqui: http://msdn.microsoft.com/en-us/library/system.net.http.owinhttprequestmessageextensions.getowincontext(v=vs.118).aspx
Pacote Nuget aqui: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin
No entanto, o método ainda faz parte do
System.Net.Http
namespace, portanto, asusing
definições que você tem devem ser adequadas.EDITAR
Ok, para esclarecer alguma confusão: Se você estiver usando um ApiController (ou seja,
MyController : ApiController
) você precisará doMicrosoft.AspNet.WebApi.Owin
pacote.Se você estiver usando um controlador Mvc regular (ou seja,
MyController : Controller
) você precisará doMicrosoft.Owin.Host.SystemWeb
pacote.No MVC 5, os pipelines para Api e MVC regular eram muito diferentes, mas geralmente têm as mesmas convenções de nomenclatura. Portanto, um método de extensão em um não se aplica ao outro. O mesmo vale para muitos filtros de ação etc.
fonte
Microsoft.Owin.Host.SystemWeb
, não estáMicrosoft.AspNet.WebApi.Owin
.Microsoft.AspNet.WebApi.Owin
. Se você estiver em um controlador MVC regular, você precisaráMicrosoft.Owin.Host.SystemWeb
. ORequest
objeto é diferente dependendo de qual tipo de controlador você está usando, portanto, um método de extensão diferente.Nenhum desses funcionou para mim. Tive que comparar os pacotes Nuget com um que foi criado com o Identity e descobri que falta esse pacote Nuget que, quando adicionado, corrigiu o problema para mim
Aparentemente, você precisa dele para executar OWIN no IIS usando o pipeline de solicitação ASP.NET (leia, você está ferrado sem ele!)
fonte
Na WEB API, você pode obter a referência usando o seguinte:
funciona no Identity 2.0
fonte
Pode ser necessário adicionar o pacote NuGet
Microsoft.Owin.Host.SystemWeb
para fazer isso:fonte
No meu caso, preciso adicionar
para resolver GetOwinContext e, em seguida, GetUserManager na linha a seguir.
fonte
Eu tenho esse problema e baixei o pacote extra do nuget para resolver meu problema, (execute o seguinte comando no console do gerenciador de pacotes) Install-Package Microsoft.Owin.Host.SystemWeb
fonte
Isso me levou uma eternidade para encontrar uma resposta simples: mas o que fiz foi usar a extensão Get da única instância do IOwinContext que foi instanciado na inicialização. Então ficou assim:
fonte
O
GetOwinContext()
método de extensão não é encontrado em threads diferentes da thread GUI.Portanto, tome cuidado para não chamar esta função de qualquer
await
função ed.fonte
Depois de examinar o projeto padrão ASP.NET, descobri que precisava incluir isso na inicialização do meu aplicativo:
fonte
Estava faltando o pacote: Microsoft.AspNet.WebApi.Owin para ApiControllers. Espero que isto ajude!
fonte
Eu tive o mesmo problema e resolvi usando um método privado:
private IAuthenticationManager AuthenticationManager { get { return HttpContext.Current.GetOwinContext().Authentication; } }
Isso funcionou perfeitamente para mim.
fonte
(Observe que esta resposta é para ASP.NET Web API que corresponde à tag usada na pergunta. Consulte esta pergunta se sua pergunta for em relação à ASP.NET MVC.)
A pergunta não especifica como o serviço ASP.NET Web API deve ser hospedado . A caixa de diálogo nesta postagem indica (ênfase minha):
O uso do
Microsoft.AspNet.WebApi.Owin
pacote é recomendado na resposta aceita . Nesta resposta, estou relatando o que funcionou para mim ao hospedar um serviço ASP.NET Web API no IIS .Primeiro, instale o seguinte pacote NuGet:
(Observe que, enquanto escrevo, a versão mais recente disponível deste pacote NuGet é 3.1.0 . Além disso, na medida em que isso pode importar, estou usando o Visual Studio 2013 Atualização 5.)
Depois de instalar este pacote NuGet, você pode fazer o seguinte:
Agora, para lançar alguma luz sobre como essas declarações são resolvidas. No Visual Studio, se você clicar com o botão direito
GetOwinContext
em uma das instruções e selecionar "Peek Definition", o Visual Studio exibirá o seguinte:Como você pode ver, dentro do
System.Web
namespace, existem doisGetOwinContext
métodos de extensão:HttpContext
classe, eHttpRequest
classe.Novamente, para aqueles que hospedam seu serviço de API da Web no IIS, minha esperança é que isso esclareça qualquer ambigüidade em relação a onde uma definição para
GetOwinContext
pode ser encontrada com relação a esta data tardia em 2017.fonte
Eu tive que adicionar pacote
Microsoft.AspNet.Identity.Owin
fonte