Request.Url.Segments [3] не работает с IIS 7 - PullRequest
1 голос
/ 13 апреля 2011

Request.Url.Segments[3] возвращает имя страницы.на моем демо-сервере есть IIS6, и он работает нормально, но на моем живом сервере установлено IIS7 и Request.Url.Segments[3] не возвращает имя страницы, это выдает ошибку

Пожалуйста, помогите мне.Заранее спасибо

Ответы [ 2 ]

14 голосов
/ 13 апреля 2011

Это не имеет никакого отношения к версии IIS. Скорее всего, у вас другая настройка для сайта.

Например, в dev, по умолчанию в 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]

Если вы не ищете последний элемент, возможно, вам придется придумать лучший способ указать, что вам нужно.

1 голос
/ 13 апреля 2011

Значение для каждого элемента в .Segments полностью зависит от 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) одинаков для всех сред.(Даже тогда. Это не очень хороший способ сделать это, так как он настолько хрупок для изменений)

Как указывает Коби, простое использование uri.Segments.Last () даст вам последний сегмент (безстрока запроса, если таковая имеется), это именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...