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

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메소드를 찾을 수 있지만 솔루션에서 검색 할 때 찾을 수있는 곳이 없습니다 … 오래된 라이브러리가 있어야하지만 할 수는 없습니다. 그것을 찾아라!



답변

아!

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

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

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

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


답변

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


답변

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

using System.Web;

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

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

GetUserManager 메서드를 사용합니다.

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


답변

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


답변

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


답변

그냥 사용

HttpContext.Current.GetOwinContext ()

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


답변

웹 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;

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