如何在Owin托管上获取Owin的原始网址(传递给HTTP请求的网址),独立?
例如,http://localhost/myapp和http://localhost/myapp/都包含在IOwinRequest.Path
/
中。 PathBase
始终包含/myapp
,Uri.OriginalString
始终包含http://localhost/myapp/。
(在ASP.NET中,我会调用HttpContext.Current.Request.RawUrl
,它会返回/myapp
或/myapp/
。)
原因:目前,我需要它来执行服务器端重定向以添加尾随/
(如果它丢失)(独立于托管)。
答案 0 :(得分: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,例如。