2014-01-29 3 views
4

HttpContext는 자체 호스팅에서 지원되지 않습니다. 웹 api 자체 호스팅을 사용하여 클라이언트의 IP 주소 얻기

나는 내 자신이 통합 테스트는 다음이 코드 중 하나가 작동하지 않습니다에 메모리 호스팅 실행

:

// OWIN Self host 
var owinEnvProperties = request.Properties["MS_OwinEnvironment"] as IDictionary<string, object>; 
if (owinEnvProperties != null) 
{ 
    return owinEnvProperties["server.RemoteIpAddress"].ToString(); 
} 

owinEnvProperties는 항상 null입니다.

그렇다면 자체 호스팅을 사용하여 클라이언트 IP 주소를 얻으려면 어떻게해야합니까? 당신이 널 (null)에 대한 테스트를 걱정하지 않는 경우,

string ipAddress; 
Microsoft.Owin.IOwinContext owinContext = Request.GetOwinContext(); 
if (owinContext != null) 
{ 
    ipAddress = owinContext.Request.RemoteIpAddress; 
} 

나 :

+0

"메모리"또는 "자체 호스트"를 사용하고 있습니까? "메모리 상주"는 네트워크 상호 작용이 없기 때문에 IP 주소를 갖지 않습니다. –

+0

내 통합 테스트가 호스트 owin을 시작하지는 않지만 웹 API 요청 파이프 라인을 인 메모리 테스트합니다. 좋아, 적어도 내가 localhost 얻을 줄 알았지 만, 당신은 바로 올 것이다 : p – Pascal

+0

"네트워크 상호 작용이 없기 때문에"그렇다면 나는 정말로 빨리 메모리 내 테스트 또는 새로운 HttpSelfHostServer로 실제 자기 호스트 테스트를 원한다고 다시 생각해야한다. (config) .OpenAsync() etc ... 그러면 HttpServer는 버그와 해결 방법을 제외하고 나에게 아무것도주지 않는다. – Pascal

답변

3
const string OWIN_CONTEXT = "MS_OwinContext"; 

if (request.Properties.ContainsKey(OWIN_CONTEXT)) 
{ 
    OwinContext owinContext = request.Properties[OWIN_CONTEXT] as OwinContext; 
    if (owinContext != null) 
     return owinContext.Request.RemoteIpAddress; 
} 
+0

https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web .Http.Owin/OwinHttpRequestMessageExtensions.cs이 MVC 만 있습니까? – Pascal

9

this을 바탕으로, 나는 더 최신 및 우아한 해결책 다음을 수행 할 수있을 거라고 생각 OWIN 컨텍스트를 사용하면이 한 면만 사용할 수 있습니다.

string ipAddress = Request.GetOwinContext().Request.RemoteIpAddress; 
관련 문제