これを行う簡単な方法があることを認識しており、私を信じて、それらを試しました。もちろん、私はどんな提案にもオープンです=)。コード全体を読む必要はなく、問題がどこにあるかを示す部分だけを読む必要があります。また、皆さんがわかるように、私は 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;
}
信じられないかもしれませんが、Web ページで生成される出力は次のとおりです。
それを myURL にコピーすると、次のようになります: "http://sar.smg.com.ar/Default.aspx?TabID=912" トリミングとToLower myURL. 新しい URL は「http://sar.smg.com.ar/default.aspx?tabid=912」です。 「:80」を置き換えます。 新しい URL は「http://sar.smg.com.ar/default.aspx?tabid=912」です。 「http://」を置き換えます。 新しい URL は「intranetqa/default.aspx?tabid=912」です。 「/」の後のすべてを削除します。 新しい URL は「intranetqa」です GetPortalAlias が「intranetqa」を返す
そのため...何らかの理由で、置換セクションに到達するたびに、「sar.smg.com.ar」ではなく「intranetqa」で始まるように不思議なことに変異します。「intranetqa」はデフォルトのホスト名です。何らかの方法で HTTP:// の文字を変更または削除すると、文字列が変更されます。
2 つの文字列が等しい場合、コンパイラがそれらを同じ場所に格納することを認識しているため、エラーを防止したかっstring.copy
たためです。これらの行を削除して直接使用Request.Url.ToString()
しmyURL
ても、何も起こりません。それらは、それが機能するかどうかを確認するための単なるテストでした。
これが私が試したことのリストです:
string
/のすべての組み合わせString
、どれも機能しませんでした。- 試してみたところ
Request.Host.Url
、「intranetqa」が表示されました。 - 私は使用
Request.Url.AbsoluteUri
したことがあります。そのため、replace :80 行があります。 - この機能を使用すると、イントラネット
.tochararray
の機能が戻ってきます - myURL = myURL.Substring(6) はイントラネットの問題を返します。
- string.Contains("sar.smg.com.ar") は false を返します。
トリックはここにあると思います:
Uri uriAddress1 = Request.Url;
"The parts are <br>" + "Part 1: " + uriAddress1.Segments[0] + "<br>Part 2: " + uriAddress1.Segments[1];
Part1 : "/" および Part 2: "Default.aspx" を指定します。パート 3 (インデックス 2) にアクセスしようとすると、例外が発生します。request.url には最初の部分がありませんが、ToString() メソッドを呼び出すと、「偽の」最初の部分のようになります