从URL字符串中提取查询字符串我没有使用请求或httputility,因为我只是在解析一个字符串。但是,当我遇到这样的URL时,我的程序无法正确解析它:http://www.google.com.mt/search?client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&channel=s&hl=mt&source=hp&biw=986&bih=663&q=hotmail&meta=&btnG=Fittex+bil-Google我想要做的是获取q=的索引和&的索引,然后取中间的单词,但在这种情况下,索引of&将小于q=并且它会给我错误。有什么建议么?感谢您的回答,一切似乎都很好:)ps我不能使用httputility,不是我不想。当我添加对system.web的引用时,不包括httputility!它仅包含在asp.net应用程序中。再次感谢不清楚您为什么不想使用HttpUtility。您始终可以添加对System.Web的引用并使用它:varparsedQuery=HttpUtility.ParseQueryString(input);Console.WriteLine(parsedQuery["q"]);如果那不是一种选择,这种方法可能会起作用帮助:varquery=input.Split('&').Single(s=>s.StartsWith("q=")).Substring(2);控制台.WriteLine(查询);它拆分&并查找“q=”并获取位置2的子字符串以返回=符号后的所有内容。假设会有一个匹配项,这对于这种情况似乎是合理的,否则将抛出异常。如果不是这种情况,将Single替换为Where,遍历结果并在循环中执行相同的子字符串操作。编辑:为了涵盖评论中提到的场景,可以使用这个更新版本:intindex=input.IndexOf('?');varquery=input.Substring(index+1).Split('&').SingleOrDefault(s=>s.StartsWith("q="));if(query!=null)Console.WriteLine(query.Substring(2));如果您不想使用System.Web.HttpUtility(因此能够使用客户端配置文件),您仍然可以使用MonoHttpUtility.cs,它只是一个可以嵌入到您的应用程序中的独立.cs文件。然后,您可以简单地在您的类中使用ParseQueryString方法来正确解析查询字符串。这是解决方案-stringGetQueryString(stringurl,stringkey){stringquery_string=string.Empty;varuri=newUri(url);varnewQueryString=HttpUtility.ParseQueryString(uri.Query);query_string=newQueryString[键]。字符串();返回查询字符串;为什么不创建一个以q=开头的字符串,直到下一个&?返回字符串的代码?例如:strings=historyString.Substring(url.IndexOf("q="));intnewIndex=s.IndexOf("&");字符串newString=s.Substring(0,newIndex);干杯使用可用的工具:StringUrlStr="http://www.google.com.mt/search?client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&channel=s&hl=mt&source=hp&biw=986&bih=663&q=hotmail&meta=&btnG=Fittex+bil-Google";NameValueCollectionItems=HttpUtility.ParseQueryString(UrlStr);StringQValue=Items["q"];如果您确实需要自己进行解析,并且只对“q”的值感兴趣,则以下内容将起作用:stringurl=@"http://www.google.com.mt/search?"+"client=firefoxa&rls=org.mozilla%3Aen-"+"US%3Aofficial&channel=s&hl=mt&source=hp&"+"biw=986&bih=663&q=hotmail&meta=&btnG=Fittex+bil-Google";intquestion=url.IndexOf("?");if(question>-1){intqindex=url.IndexOf("q=",question);if(qindex>-1){int&符号=url.IndexOf('&',qindex);stringtoken=null;if(ampersand>-1)token=url.Substring(qindex+2,&ersand-qindex-2);elsetoken=url.Substring(qindex+2);Console.WriteLine(token);}}然而,尝试使用正确的URL解析器,它会是你自救的很多麻烦(修改这个问题以包括检查'?'标记,并在查询字符串末尾支持'q'值(末尾没有'&'))这就是为什么你应该使用Uri和HttpUtility.ParseQueryString.HttpUtility适用于.NetFramework,但是WinRT应用不支持这个类,如果想从Windows应用商店应用中的URL获取参数,需要使用WwwFromUrlDecoder,可以从这个类创建一个对象使用要从中获取参数的查询字符串,对象具有枚举器并且还支持lambda表达式。这是一个例子varstringUrl="http://localhost/?name=Jonathan&lastName=Morales";vardecoder=newWwwFormUrlDecoder(stringUrl);//使用GetFirstByName方法stringnameValue=decoder.GetFirstByName("name");//nameValue有"Jonathan"//使用Lambda表达式varparameter=decoder.FirstOrDefault(p=>p.Name.Contains("last"));//IWwwFormUrlDecoderEntry变量类型stringparameterName=parameter.Name;//lastNamestringparameterValue=parameter.Value;//Morales也可以访问http://www.dzhang.com/blog/2012/08/21/parsing-uri-query-strings-in-windows-8-metro-style-apps以上是C#学习教程:从URL字符串中提取查询字符串以共享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
