我正在使用以下代码,这对大多数服务都运行得很好但是在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,则其工作正常......
答案 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];