[英]Request.Url.Segments[3] not working with IIS 7
Request.Url.Segments[3]
返回頁面名稱。 在我的演示服務器上具有IIS6
並且可以正常工作,但是在我的活動服務器上已安裝IIS7
並且Request.Url.Segments[3]
不返回頁面名稱,它給出了錯誤。
請幫我。 提前致謝
這與IIS的版本無關。 您很有可能為該站點設置了其他設置。
例如,在開發人員上,默認情況下在Visual Studio F5調試中,該站點運行在:
http://localhost:1234/sitename/folder/page.aspx
|\_______/\_____/\_______/
0 1 2 3
在測試/生產中,您可能沒有第一個文件夾:
http://sitename.corpo.com/folder/page.aspx
|\_____/\_______/
0 1 2
有更好的方法可以動態獲取數組的最后一個元素,即使不知道其長度也是如此。 嘗試使用:
Request.Url.Segments.Last()
或者,如果沒有linq,
Request.Url.Segments[Request.Url.Segments.Length - 1]
如果您不查找最后一個元素,則可能必須提出一種更好的方法來指定所需的內容。
.Segments
每個項目的值完全取決於Url,而Url由IIS中網站的設置方式決定。
例如,將您的網站放在網絡服務器的根目錄下,將使該網站位於虛擬根目錄下會產生不同的結果。
在url http://myserver/mypage.aspx中 ,該頁面位於項目索引1。在url http://myserver/myvirtualroot/mypage.aspx中 ,該頁面位於項目索引2。
您可以自己對此進行演示,如下所示:
var uri = new Uri("http://myserver/mypage.aspx");
for (var i = 0; i < uri.Segments.Length; i++)
{
Console.WriteLine("Segments[{0}]: {1}",i, uri.Segments[i]);
}
這給出:
Segments[0]: /
Segments[1]: mypage.aspx
現在再試一次
var uri2 = new Uri("http://myserver/myvirtualroot/mypage.aspx");
這次您將獲得:
Segments[0]: /
Segments[1]: myvirtualroot/
Segments[2]: mypage.aspx
關鍵是您不能可靠地說“項目索引3是頁面”,除非您知道實際的站點URL(因此在IIS中的配置)在環境之間是相同的。 (即使那樣。這樣做也不是一種特別好的方法,因為它非常容易更改)
正如Kobi所指出的,僅使用uri.Segments.Last()即可為您提供最后一個所需的最后一個段(如果有,則沒有查詢字符串)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.