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