簡體   English   中英

Request.Url.Segments [3]不適用於IIS 7

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM