ASP.NET ID-HttpContext에는 GetOwinContext에 대한 확장 메서드가 없습니다.


384

https://github.com/rustd/AspnetIdentitySample 에서 ASP.NET Identity 샘플을 다운로드하여 성공적으로 실행했습니다.

나는 현재 프로젝트에서 ASP.NET Identity 프레임 워크를 구현하는 중이며 하루 종일 나를 화나게하는 문제가 발생했습니다 ...

GetOwinContext() 내 확장 방법으로 존재하지 않습니다 HttpContext

클래스 라이브러리에서 ID 프레임 워크를 구현하고 있습니다. 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;

... 이것이 나를 벽으로 몰고 갔다 .... 어떤 생각?

최신 정보

샘플에서 Identity & OWIN 버전을 확인했으며 솔루션에 동일한 버전이 있는지 확인했습니다.

더구나, 샘플에서 객체 브라우저를 검색하면 GetOwinContext메소드를 찾을 수 있지만 솔루션에서 검색 할 때 찾을 수있는 곳이 없습니다 ... 오래된 라이브러리가 있어야하지만 할 수는 없습니다. 그것을 찾아라!

답변:


713

아!

나는 그것을 발견했다 ... 나는 여분의 패키지를 가지고 있지 않았다.Microsoft.Owin.Host.SystemWeb

검색하고 설치하면 제대로 작동합니다.

이제는 방금 모든 것을 놓쳤는 지 확실하지 않지만 다양한 자습서를 진행할 때 이러한 라이브러리 또는 패키지에 대한 참조가 없습니다. 이 Identity 프레임 워크를 모두 설치했을 때도 설치되지 않았습니다 ... 그것이 본인인지 확실하지 않습니다 ..

편집Microsoft.Owin.Host.SystemWeb 어셈블리 에 있지만 System.Web네임 스페이스 의 확장 메서드 이므로 전자에 대한 참조가 using있고 후자가 되어야 합니다.


6
나는이 튜토리얼을 사용하고 있습니다 : 하나에서 것을 파악 주셔서 감사합니다 asp.net/identity/overview/getting-started/...를 하고 누락 된 단계입니다
프렌치

23
@tne-귀하의 의견에 감사드립니다 ... 비록 '목표없이 돌아 다니는'것은 거의 없었습니다.-나는 신뢰할 수있는 리소스의 튜토리얼을 따르고있었습니다. asp.net 사이트에서 그들은 튜토리얼에서 그 단계를 갖지 못했습니다 (추가 된 이후)-사람들 이이 답변을 모두지지한다는 사실과 원래 Q도 내가이 문제를 가진 유일한 사람이 아니라는 것을 나타냅니다.
Darren Wainwright

5
@ 대런, 충분히 공평합니다. (저는 다르게 말했을 수 있다는 것을 알고 있습니다.)
tne


5
그것이이 참조를 업데이트 한 것인지는 모르겠지만 과제를 약간 변경해야했습니다 var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;(현재 질문에없는 부분 포함).
Ortund

177

HttpContext컨트롤러 외부에있는 경우 전류를 참조해야한다고 생각합니다 . MVC 컨트롤러에는 현재 컨텍스트에 대한 기본 참조가 있습니다. 그러나 그 외에는 현재를 원한다고 명시 적으로 선언해야합니다.HttpContext

return HttpContext.Current.GetOwinContext().Authentication;

표시되지 않는 경우 위에 표시된 코드를 사용하는 새 MVC 5 프로젝트 템플릿 ( IAuthenticationManager)은 계정 컨트롤러 상단에 다음과 같은 using 문이 있습니다.

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 어셈블리의 일부인 것처럼 보입니다 .


이것을 시도하고 그것을 찾을 수 없습니다. -GetOwinContext () 의미합니다.
Darren Wainwright

2
@Darren-샘플 템플릿을 약간 연주했는데 어셈블리가 누락되었을 수 있습니다. System.Web.Mvc수업 프로젝트에서 참조해야 할 것 같습니다 . 주석을 달았을 때, 그것이 HttpContext.GetOwinContext()알려지지 않은 것이되었으며 ( Microsoft.Owin.Security조회가 아닌 )
Tommy

컨트롤러에서 직접 작동하도록 시도했지만 다시 찾을 수 없습니다.
Darren Wainwright

19
이것은 나를 넘어 뜨렸다. 공용 속성이 HttpContextController클래스는 당신이 상속 경우에 따라서, HttpContext.GetOwinContext()예상대로 작동합니다. 그래도 상속하면 ApiController그러한 속성이 없습니다. 따라서 HttpContext클래스를 참조하므로 클래스 Current의 인스턴스에 액세스하는 데 사용해야 합니다. 따라서 컨트롤러에서 ApiController로 코드를 복사 / 붙여 넣기하고 왜 작동하지 않는지 궁금하다면 이것이 바로 해답입니다.
David Miani

"현재"는 저에게 꼭 필요한 도구입니다
Click Ok

24

내 컨트롤러와 Asp.Net 템플릿 컨트롤러의 구문을 사용하여 시행 착오를 한 후

using System.Web;

나를 위해 문제를 해결했습니다. 또한 다음을 추가해야합니다.

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

GetUserManager 메서드를 사용합니다.

Microsoft는 마우스 오른쪽 버튼으로 클릭하여 자동 으로이 문제를 해결하고 누락 된 다른 구문과 같은 문제를 해결할 수있는 방법을 찾지 못했습니까?


1
이것은 나를 위해 일했다. 이미 Identity 라이브러리가 있었지만 System.Web이 필요한 것 같습니다.
SouthShoreAK

1
이것은 분명히 어셈블리와 네임 스페이스 모두에서 많이 움직였습니다. 확장 방법이기 때문에 정말 고통 스럽습니다. 모든 라이브러리를 업데이트 했으며이 답변은 현재 위치를 반영합니다.
shannon

아,
그래

1
슬프게도 확장 방법은 자동으로 해결할 수 없습니다.
Ronen Festinger

22

필자의 경우 nuget을 통해 Microsoft.AspNet.WebApi.Owin 참조를 추가 하면 트릭이 발생했습니다.


예, 현재 최신 버전 에서이 작업을 수행했습니다. 연장 방법은이 패키지에 Assemby System.Web.Http.Owin 과 내 네임 스페이스 System.Net.Http
oatsoda

16

너겟 패키지를 설치했는지 확인하십시오 Microsoft.AspNet.Identity.Owin. 그런 다음 System.Net.Http네임 스페이스를 추가하십시오 .


나도 그 중 하나를했다. 신원 정보를 설치할 때 다른 라이브러리가 설치되지 않은 것으로 나타났습니다.
Darren Wainwright

@Darren 패키지 이름을 추가하십시오. 감사합니다
Saturn Technologies

6
@SaturnTechnologies 저에게 다른 패키지는 Microsoft.Owin.Host.SystemWeb과 네임 스페이스 System.Web
WiSeeker입니다.

1
두 번째 WiSeeker입니다. 나에게 이것은 도움이되지 않았다. Darren의 설치 제안 Microsoft.Owin.Host.SystemWeb은 트릭을 수행했습니다.
Max Barraclough

13

그냥 사용

HttpContext.Current.GetOwinContext ()

내 경우에는 트릭을 수행했습니다.


10

웹 API 프로젝트에서이 오류가 발생하는 개발자의 경우-

GetOwinContext 확장 메소드는 System.Web.Http.Owindll에 정의되어 있으며 하나 이상의 패키지가 필요합니다 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아래로 -

     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;

한 프로젝트에서 다른 프로젝트로 코드를 이동하는 동안이 오류가 발생했습니다.


4

API에서 UserManager를 가져 오려면

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

여기서 AppUserManager는 UserManager에서 상속되는 클래스입니다.


4

나는 올바른 패키지와 사용법을 모두 가지고 있었지만 일하기 전에 먼저 건축 GetOwinContext()해야했습니다.


처음으로 작동하도록 빌드를 어떻게 수정 했습니까?
Nordes

@Nordes 때때로 VS는 백그라운드에서 빌드하지 못합니다 (예 : 컴파일 오류가 있음을 알려줍니다). 실제 빌드를 트리거하면 더 자주 청소하고 빌드합니다. 케빈이 겪었을 수도 있습니다.
Maverick

0

이 패키지를 설치하면 코드가 작동합니다 : => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.