2015-01-16 5 views
4

Owin (HTTP 요청에 전달 된 URL)에서 원시 URL을 가져 오는 방법은 무엇입니까? 독립적으로 Owin 호스팅에서?Owin에서 원시 URL을 가져 오는 방법은 무엇입니까?

예를 들어, http://localhost/myapphttp://localhost/myapp/IOwinRequest.Path/을 포함합니다. PathBase에는 항상 /myappUri.OriginalString이 포함되어 있으며 항상 http://localhost/myapp/이 포함되어 있습니다.

(ASP.NET에서 나는 반환하거나 /myapp 또는 /myapp/하는 HttpContext.Current.Request.RawUrl을 부를 것이다.)

이유 : 현재, 나는 후행 /를 추가 할 수있는 서버 측 리디렉션을 수행 할 필요가없는 경우 (호스트에 독립적으로).

+0

후행 '/'을 추가해야하는 이유는 무엇입니까? IMO는 중요하지 않아야합니다 ... – ChrFin

+0

'/'가 없으면 다른 위치를 가리키는 상대 URL을 말합니다. –

+0

...하지만 '/ myapp/mypage /'는 상대적이며'/ myapp/mypage /'는 절대적이지만'/ myapp/mypage'도 절대 같은 위치를 가리키고 있습니다 ... – ChrFin

답변

1

요청을 수신하는 데 사용 된 HttpListenerContext에 액세스하여 Owin에서 원시 URL을 가져올 수 있습니다. 당신이 구별 할 수 있도록

public static string RealUrlFromOwin(HttpRequestMessage request) 
    { 
     var owincontext = ((OwinContext) request.Properties["MS_OwinContext"]); 
     var env = owincontext.Environment; 
     var listenerContext = (System.Net.HttpListenerContext) env["System.Net.HttpListenerContext"]; 
     return listenerContext.Request.RawUrl; 
    } 

이는 URL에 후행/같은 것들을 복구되지 않습니다, 또한 어떤 디코딩하기 전에 URL 문자열을 얻을 것이다이 적용되는 '!' 및 % 21, 예를 들어.

+0

HttpListener 호스트에서만 작동하지만 다른 호스트에서는 작동하지 않을 것으로 예상됩니까? –

+0

동의하지만, 다른 호스팅 옵션에는 동일한 기술이있을 것입니다. 사용중인 리스너는 OwinContext.Environment 컬렉션에서 참조 될 가능성이 가장 높습니다.이 컬렉션은 저장되는 키와 원시 URL을 가져 오는 방법을 찾는 문제입니다. – RobinG

+1

질문은 호스팅에서 독립적으로 수행하는 방법입니다. (owin 응용 프로그램/라이브러리를 개발할 때, owin은 통일 된 플랫폼이므로 이후의 모든 호스팅 플랫폼을 알지 못합니다.) –

관련 문제