我想删除最后一段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)
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)
要删除Request.Url的最后一段,从绝对uri中减去最后一段的长度就足够了。
string uriWithoutLastSegment = Request.Url.AbsoluteUri.Remove(
Request.Url.AbsoluteUri.Length - Request.Url.Segments.Last().Length );
Run Code Online (Sandbox Code Playgroud)