c# – 来自Request.Url.ToString()的字符串在操作/比较第一个字符时,会重新更改为另一个字符串

前端之家收集整理的这篇文章主要介绍了c# – 来自Request.Url.ToString()的字符串在操作/比较第一个字符时,会重新更改为另一个字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道有更简单的方法来做到这一点,相信我,我试过了.我当然可以接受任何建议=).你不需要阅读整个代码,只是说明问题所在的部分.此外,我正在debbugging perl风格,所以你们可以看到.哦,我是否提到在我的开发环境中,一切都按照预期的方式工作?

以下是代码

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的请求添加额外的头.

猜你在找的C#相关文章