왜 이것이 작동하지 않는지 알아 내려고 한 시간 동안 검색했습니다.
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.Owin
DLL 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;
}
}