繁体   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