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