の最後のセグメントを削除したい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;
ささいな解決策は、文字列の最後から最初に向かって文字ごとに繰り返し、最初に来る「/」を検索することです(これも頭に浮かんだと思います)。
これを試して:
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);
}