Fiz o download e executei com êxito o exemplo de identidade do ASP.NET aqui: https://github.com/rustd/AspnetIdentitySample
Agora estou no meio da implementação da estrutura de identidade do ASP.NET no meu projeto e encontrei um problema que me deixou louco o dia todo ...
GetOwinContext()
não existe como método de extensão no meuHttpContext
Estou implementando a estrutura de identidade na biblioteca de classes. Eu instalei todas as últimas (versões de pré-lançamento) da estrutura do Identity e tudo - além disso - está funcionando bem.
Tentei implementar o mesmo código que o mesmo direto no meu controlador e encontrei o mesmo problema.
Estou claramente perdendo uma referência em algum lugar, embora não tenha idéia do que ...! ..
O bloco de código que está me matando é:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Eu adicionei referências ao seguinte - tentei isso na minha biblioteca de classes e também diretamente no controlador, nenhum deles funciona para mim ...
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
... isso está me deixando louco .... alguma ideia?
ATUALIZAR
Verifiquei as versões do Identity & OWIN na amostra e verifiquei se as mesmas versões estão na minha solução.
Além disso, se eu pesquisar o navegador de objetos na amostra GetOwinContext
, posso encontrar o método; no entanto, quando o procuro na minha solução, ele não pode ser encontrado em nenhum lugar ... Preciso ter alguma biblioteca desatualizada, mas posso ' Não encontre!
fonte
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
(Atual incluída onde não estava na pergunta).Acredito que você precise fazer referência à corrente
HttpContext
se estiver fora do controlador. Os controladores MVC têm uma referência básica ao contexto atual. No entanto, fora disso, você deve declarar explicitamente que deseja o atualHttpContext
Quanto a isso não aparecer, um novo modelo de projeto MVC 5 usando o código que você mostra acima (o
IAuthenticationManager
) tem as seguintes instruções de uso na parte superior do controlador de conta:Comentando cada um, parece que
GetOwinContext()
realmente faz parte do assembly System.Web.Mvc.fonte
System.Web.Mvc
partir do seu projeto de classe. Quando comentado, que é o que fezHttpContext.GetOwinContext()
desconhecido se tornar (e não aMicrosoft.Owin.Security
montagem)HttpContext
naController
classe, portanto, se você herdar disso,HttpContext.GetOwinContext()
funcionará conforme o esperado. Se você herdarApiController
, porém, não existe essa propriedade. Portanto,HttpContext
fará referência à classe, que exigirá que você useCurrent
para acessar uma instância da classe. Portanto, se você copiar / colar o código de um Controller para um ApiController e se perguntar por que não funciona, esta é a resposta para você.Após tentativa e erro comparando as instruções de uso do meu controlador e do controlador de modelo Asp.Net
Resolvido o problema para mim. Você também precisará adicionar:
Para usar o método GetUserManager.
A Microsoft não conseguiu encontrar uma maneira de resolver isso automaticamente com o botão direito e resolver como outras instruções de uso ausentes?
fonte
No meu caso, adicionar a referência Microsoft.AspNet.WebApi.Owin via nuget fez o truque.
fonte
Verifique se você instalou o pacote nuget
Microsoft.AspNet.Identity.Owin
. Em seguida, adicioneSystem.Net.Http
espaço para nome.fonte
Microsoft.Owin.Host.SystemWeb
fez o truque.Apenas usando
fez o truque no meu caso.
fonte
Para desenvolvedores que estão recebendo esse erro no Web API Project -
O método de extensão GetOwinContext é definido na
System.Web.Http.Owin
dll e será necessário mais um pacoteMicrosoft.Owin.Host.SystemWeb
. Este pacote precisa ser instalado no seu projeto a partir do nuget.Link para o pacote : Comando de instalação do pacote OWIN -
Link para o pacote System.web : comando de instalação do pacote -
Para resolver esse erro, você precisa descobrir por que está ocorrendo no seu caso. Verifique os pontos abaixo em seu código -
Você deve ter referência a
Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity.Owin;
Defina
GetOwinContext()
AbaixoHttpContext.Current
como abaixo -OU
Código completo Onde GetOwinContext () é usado -
Namespace é que estou usando no arquivo de código onde GetOwinContext () é usada
Eu recebi esse erro ao mover meu código de um projeto para outro.
fonte
Para obter o UserManager na API
onde AppUserManager é a classe que herda do UserManager.
fonte
Eu tinha todos os pacotes e utilizações corretos, mas tive que construir primeiro antes de poder começar
GetOwinContext()
a trabalhar.fonte
Basta instalar este pacote e seu código funcionará: => Pacote de Instalação Microsoft.Owin.Host.SystemWeb -Version 2.1.0
fonte