以下是代码:
string GetPortalAlias() { String myURL2 = Request.Url.ToString(); URLLabel.Text = "Original Request.Url.ToString() returned: \"" + myURL2 + "\""; string myURL = string.Copy(myURL2); URLLabel.Text = "Copying it to myURL,it's now: \"" + myURL + "\""; myURL = myURL.ToLower().Trim(); URLLabel.Text += "<br>Trimming and ToLower myURL.<br>The new url is \"" + myURL + "\"" + "<br>"; myURL = myURL.Replace(":80",""); URLLabel.Text += "Replacing the \":80\".<br> The new url is\"" + myURL + "\"<br>"; //***HERE LIES THE PROBLEM*** myURL = myURL.Replace("http://",""); URLLabel.Text += "Replacing the \"http://\".<br> The new url is\"" + myURL + "\"<br>"; //***PROBLEM ENDS*** myURL = myURL.Remove(myURL.IndexOf("/")); URLLabel.Text += "Removing everything after the \"/\"." + "<br> The new url is \"" + myURL + "\"<br>"; URLLabel.Text += "<br>GetPortalAlias Returning \"" + myURL + "\""; return myURL; }
相信与否,网页中产生的输出是:
Copying it to myURL,it's now: "http://sar.smg.com.ar/Default.aspx?TabID=912" Trimming and ToLower myURL. The new url is "http://sar.smg.com.ar/default.aspx?tabid=912" Replacing the ":80". The new url is"http://sar.smg.com.ar/default.aspx?tabid=912" Replacing the "http://". The new url is"intranetqa/default.aspx?tabid=912" Removing everything after the "/". The new url is "intranetqa" GetPortalAlias Returning "intranetqa"
所以…由于某种原因,只要它到达替换部分,它神秘地突变,以“intranetqa”而不是“sar.smg.com.ar”开头. “intranetqa”是我们的默认主机名.更改或使用HTTP的任何字符://以任何方式转播STRING.
我做一个string.copy,因为我知道如果两个字符串相等,编译器将它们存储在同一个地方,所以我想防止错误.将这些线条移开并使用Request.Url.ToString()tomyURL直接不执行任何操作.他们只是一个考验,看看是否有效.
以下是我尝试过的内容的列表:
> string / String的所有组合都无效.
>我已经尝试过Request.Host.Url,它只是给了我“intranetqa”.
>我使用了Request.Url.AbsoluteUri,这就是为什么我有替换
80行.
>使用.tochararray功能让我回到了INTRANETQA THING
> myURL = myURL.Substring(6)返回intranetqa的东西.
> string.Contains(“sar.smg.com.ar”)返回false.
我相信诀窍在这里:
> Uri uriAddress1 = Request.Url;和“这些部分是< br>” “第1部分:”uriAddress1.Segments [0]“< br>第2部分:”uriAddress1.Segments [1];给出Part1:“/”和第2部分:“Default.aspx”.尝试访问第3部分(索引2)提供了一个例外.
request.url没有第一部分,但是当我调用ToString()方法时,它确实有一个“假的”第一部分
解决方法
您的服务器实际看到的URL始终是http://intranetqa/default.aspx?tabid = 912(在反向代理/ URL重写器拦截了请求之后)的形式.
您的服务器产生的输出实际上就像:
Copying it to myURL,it's now: "http://intranetqa/Default.aspx?TabID=912" Trimming and ToLower myURL. The new url is "http://intranetqa/default.aspx?tabid=912" Replacing the ":80". The new url is"http://intranetqa/default.aspx?tabid=912" Replacing the "http://". The new url is"intranetqa/default.aspx?tabid=912" Removing everything after the "/". The new url is "intranetqa" GetPortalAlias Returning "intranetqa"
输出重写器正在检查服务器的输出,并使用http://sar.smg.com.ar替换http:// intranetqa.一旦你剥离了这些字符串前面的http://,它不再是匹配,所以替换不再发生.
如果您想知道原始请求的URL /主机是什么,希望反向代理可以或可以配置为向原始URL的请求添加额外的头.