我想删除Request.Url
的最后一段,例如......
http://www.example.com/admin/users.aspx/deleteUser
会改为
http://www.example.com/admin/users.aspx
我更喜欢linq,但接受任何有效工作的解决方案。
答案 0 :(得分: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 `/`
作为Dour High Arch在评论中提出的方案和主持人名称的替代方案:
var noLastSegment = uri.GetComponents(UriComponents.SchemeAndServer,
UriFormat.SafeUnescaped);
答案 1 :(得分: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;
答案 2 :(得分:4)
要删除Request.Url的最后一段,就可以从绝对uri中减去最后一段的长度。
#the sum function
def displaySum(a,b):
sum = a + b
print "The sum is: %d" % sum
print "#1:"
displaySum(5,10) #1
print "#2:"
x=3
k=7 #2
displaySum(x,k)
print "#3:"
displaySum(5+5, 10+10) #3
print "#4:"
displaySum(x+5,k+10) #4
print "#5:"
var1 = int(raw_input("p1: ")) #5
var2 = int(raw_input("p2: "))
displaySum(var1,var2)
def passValue(): #6
x1 = 100
x2 = 200
displaySum(x1,x2)
print "#6:"
passValue()
答案 3 :(得分:1)
琐碎的解决方案是从字符串的末尾向它的开头迭代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);
}
答案 4 :(得分:0)
我发现操纵Uri非常烦人,其他答案也很冗长,这是我的两美分,采用扩展方法。
作为奖励,您还可以获得替代最后的细分方法。这两种方法都将保留查询字符串和url的其他部分不变。
public static class UriExtensions
{
private static readonly Regex LastSegmentPattern =
new Regex(@"([^:]+://[^?]+)(/[^/?#]+)(.*$)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public static Uri ReplaceLastSegement(this Uri me, string replacement)
=> me != null ? new Uri(LastSegmentPattern.Replace(me.AbsoluteUri, $"$1/{replacement}$3")) : null;
public static Uri RemoveLastSegement(this Uri me)
=> me != null ? new Uri(LastSegmentPattern.Replace(me.AbsoluteUri, "$1$3")) : null;
}