17

の最後のセグメントを削除したいRequest.Urlので、たとえば...

http://www.example.com/admin/users.aspx/deleteUser

に変わります

http://www.example.com/admin/users.aspx

私はlinqを好みますが、効率的に機能するソリューションはすべて受け入れます。

4

5 に答える 5

18

クラスを使用し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);
于 2012-07-17T19:19:51.180 に答える
14

@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;
于 2012-07-17T19:36:19.010 に答える
0

ささいな解決策は、文字列の最後から最初に向かって文字ごとに繰り返し、最初に来る「/」を検索することです(これも頭に浮かんだと思います)。

これを試して:

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);
}
于 2012-07-17T19:25:43.193 に答える