删除Request.Url的最后一段

bfl*_*mi3 16 c#

我想删除最后一段Request.Url,例如......

http://www.example.com/admin/users.aspx/deleteUser
Run Code Online (Sandbox Code Playgroud)

会变成

http://www.example.com/admin/users.aspx
Run Code Online (Sandbox Code Playgroud)

我更喜欢linq但接受任何有效工作的解决方案.

Ode*_*ded 15

使用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 `/`
Run Code Online (Sandbox Code Playgroud)

正如Dour High Arch在他的评论中所建议的那样,作为获得计划和主机名的替代方案:

var noLastSegment = uri.GetComponents(UriComponents.SchemeAndServer, 
                                      UriFormat.SafeUnescaped);
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用`uri.GetComponents(UriComponents.SchemeAndServer,...)`而不是`uri.Scheme`,因为前者处理端口并包含`://`. (4认同)

spe*_*der 12

与@ 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;
Run Code Online (Sandbox Code Playgroud)


Men*_*tor 5

要删除Request.Url的最后一段,从绝对uri中减去最后一段的长度就足够了。

string uriWithoutLastSegment = Request.Url.AbsoluteUri.Remove(
  Request.Url.AbsoluteUri.Length - Request.Url.Segments.Last().Length );
Run Code Online (Sandbox Code Playgroud)