获取URL的最后一个路径

时间:2014-02-18 08:22:15

标签: c# regex uri

我正在使用以下代码,这对大多数服务都运行得很好但是在URL中有一段时间我得到用户; v = 2; mp 而我需要得到< strong>用户,我该如何处理? 我需要一些通用的解决方案,因为我猜在其他一些网址中我可以得到不同的空间包机

如果网址

https://ldmrrt.ct/odata/GBSRM/User;v=2;mp
string serviceName = _uri.Segments.LastOrDefault();

如果网址为https://ldmrrt.ct/odata/GBSRM/User,则其工作正常......

2 个答案:

答案 0 :(得分:6)

只需替换:

string serviceName = _uri.Segments.LastOrDefault();

使用:

string serviceName = _uri.Segments.LastOrDefault().Split(new[]{';'}).First();

如果你需要更灵活的东西,你可以指定要包含或跳过的字符,你可以做这样的事情(稍微凌乱,你应该把它的一部分作为单独的变量提取等):

// Note the _ and - characters in this example:
Uri _uri = new Uri("https://ldmrrt.ct/odata/GBSRM/User_ex1-ex2;v=2;mp");

// This will return a string: "User_ex1-ex2"
string serviceName =
        new string(_uri.Segments
                          .LastOrDefault()
                          .TakeWhile(c => Char.IsLetterOrDigit(c)
                                          || (new char[]{'_', '-'}).Contains(c))
                          .ToArray());

更新,以回应我的理解为下面的问题:):

您可以使用String.Replace(),或者您可以通过执行以下操作来使用过滤:

// Will return: "Userexex2v=2mp"
string serviceName = 
             new string(_uri.Segments
                            .LastOrDefault()       
                            .Where(c => 
                                    !Char.IsPunctuation(c) // Ignore punctuation
                                    // ..and ignore any "_" or "-":
                                    && !(new char[]{'_', '-'}).Contains(c)) 
                             .ToArray());

如果你在生产中使用它,请注意,一定要清理一下,例如通过拆分成几个变量,并在使用之前定义char [] - 数组。

答案 1 :(得分:2)

在您的情况下,您可以尝试拆分“用户; v = 2; mp”字符串。

string [] split = words.Split(new Char [] { ';' });

返回一个字符串数组,该数组包含此实例中由指定Unicode字符数组的元素分隔的子字符串。

split.First();

或:

split[0];