[c#] Request.GetOwinContext를 찾을 수 없습니다.

왜 이것이 작동하지 않는지 알아 내려고 한 시간 동안 검색했습니다.

WebAPI가있는 ASP.Net MVC 5 응용 프로그램이 있습니다. 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는 인텔리 센스 옵션도 제공하지 않습니다.

내가 여기서 무엇을 놓치고 있습니까?



답변

GetOwinContext확장 방법은 인 System.Web.Http.OwinDLL nuget 패키지로 다운로드 될 필요 합니다 (nuget 패키지 이름 Microsoft.AspNet.WebApi.Owin이다)

Install-Package 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의 파이프 라인은 매우 달랐지만 종종 동일한 명명 규칙을 사용합니다. 따라서 하나의 확장 방법은 다른 하나에 적용되지 않습니다. 많은 액션 필터 등에 대해 동일합니다.


답변

이것들 중 어느 것도 나를 위해 일하지 않았습니다. Nuget 패키지를 Identity로 만든 패키지와 비교해야했는데이 Nuget 패키지가 누락되어 추가되었을 때 문제가 해결되었습니다.

Microsoft.Owin.Host.SystemWeb

ASP.NET 요청 파이프 라인을 사용하여 IIS에서 OWIN을 실행하려면이 기능이 필요합니다.


답변

WEB API에서 다음을 사용하여 참조를 얻을 수 있습니다.

HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

그것은 Identity 2.0에서 작동합니다


답변

이렇게하려면 NuGet 패키지를 추가해야 할 수 있습니다 Microsoft.Owin.Host.SystemWeb.

HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();


답변

제 경우에는 추가해야합니다

using Microsoft.AspNet.Identity.Owin;

다음 줄에서 GetOwinContext 및 GetUserManager를 확인합니다.

Request.GetOwinContext().GetUserManager<ApplicationUserManager>();


답변

이 문제가 있으며 문제를 해결하기 위해 nuget에서 추가 패키지를 다운로드합니다 (패키지 관리자 콘솔에서 다음 명령 실행)
Install-Package Microsoft.Owin.Host.SystemWeb


답변

이것은 간단한 답을 찾기 위해 영원히 걸렸습니다.하지만 제가 한 일은 시작에서 인스턴스화 된 IOwinContext의 단일 인스턴스의 Get 확장을 사용하는 것이 었습니다. 그래서 다음과 같이 나왔습니다.

private readonly IOwinContext _iOwinContext = HttpContext.Current.GetOwinContext();

public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? _iOwinContext.Get<ApplicationUserManager>() ;
        }
        private set
        {
            _userManager = value;
        }
    }