删除Request.Url的最后一部分

我想删除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 by 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 );