删除Request.Url的最后一段

时间:2012-07-17 19:17:19

标签: c#

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

http://www.example.com/admin/users.aspx/deleteUser

会改为

http://www.example.com/admin/users.aspx

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

5 个答案:

答案 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;
}