Я хотел бы удалить последний сегмент Request.Url
, поэтому, например...
http://www.example.com/admin/users.aspx/deleteUser
изменится на
http://www.example.com/admin/users.aspx
Я бы предпочел linq, но принял любое эффективное решение.
Я хотел бы удалить последний сегмент Request.Url
, поэтому, например...
http://www.example.com/admin/users.aspx/deleteUser
изменится на
http://www.example.com/admin/users.aspx
Я бы предпочел linq, но принял любое эффективное решение.
Используйте класс Uri
для анализа URI - вы можете получить доступ ко всем сегментам с помощью свойства Segments
и перестроить URI без последнего сегмента.
var uri = new Uri(myString);
var noLastSegment = string.Format("{0}://{1}", uri.Scheme, uri.Authority);
for(int i = 0; i < uri.Segments.Length - 1; i++)
{
noLastSegment += uri.Segments[i];
}
noLastSegment = noLastSegment.Trim("/".ToCharArray()); // remove trailing `/`
В качестве альтернативы получить схему и имя хоста, как предлагает Dour High Arch в своем комментарии:
var noLastSegment = uri.GetComponents(UriComponents.SchemeAndServer,
UriFormat.SafeUnescaped);
То же самое, что и @Oded, но вместо этого использует UriBuilder:
var uri = new Uri("http://www.example.com/admin/users.aspx/deleteUser");
var newSegments = uri.Segments.Take(uri.Segments.Length - 1).ToArray();
newSegments[newSegments.Length-1] =
newSegments[newSegments.Length-1].TrimEnd('/');
var ub=new UriBuilder(uri);
ub.Path=string.Concat(newSegments);
//ub.Query=string.Empty; //maybe?
var newUri=ub.Uri;
Ну, тривиальным решением было бы итерацию char на char от конца строки к ее началу и поиск первого "/" (я думаю, это также пришло вам в голову).
Попробуйте следующее:
string url = "http://www.example.com/admin/users.aspx/deleteUser";
for (int i = url.Length - 1; i >= 0; i--) {
if (url[i] == '/') return url.Substring(0, i - 1);
}
Чтобы удалить последний сегмент Request.Url, достаточно вычесть из абсолютного uri длину последнего сегмента.
string uriWithoutLastSegment = Request.Url.AbsoluteUri.Remove(
Request.Url.AbsoluteUri.Length - Request.Url.Segments.Last().Length );