HTTP GET编码Web服务调用
我有一个Web服务,我打电话从C#。我已经能够使用简单的GET查询,如成功获得回应:HTTP GET编码Web服务调用
http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=describeprocess&identifier=test
然而,当让更复杂的查询响应始终是一个错误。
http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=execute&identifier=test&datainputs=[key1=val1,val2,val3;key2=val4;key3=val5]
我打电话的Web服务是使用PyWPS发布的,而且我使用的查询字符串在浏览器中有效。
我试图逃避的键值对所有的值:
e.g. "datainputs=[key1="+Uri.EscapeDataString("val1"), ...
我也试过的
HttpUtility.UrlEncode
和
HttpUtility.UrlPathEncode
我的组合得到如下错误:异常exceptionCode =“MissingParameterValue”locator =“key1”
我不知道我在做什么错,但这些网址在我的浏览器中正常工作,所以我怀疑我编码错误。我无法找到任何单个键值对包含键值对的列表(即datainputs = [key1 = v1,v2,v2; ...等)
在这个问题上的任何帮助,不胜感激。
编辑:这是我如何我打电话的web服务
var targetUri = new Uri(uri);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(targetUri);
req.Method = method.ToUpper();
req.ContentLength = 0;
req.ContentType = "text/xml";
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string responseString = reader.ReadToEnd();
reader.Close();
responseStream.Close();
response.Close();
return responseString;
你 '=' 的招牌 “[键1 = VAL1,VAL2,VAL3;键2 = VAL4; KEY3 = val5]”将需要双重逃脱。尝试转义datainput的值,然后转义完整的URL。
我试图逃避“[”和“]”中的所有内容,然后将其添加到查询的其余部分并再次转义,但这似乎也不起作用。我也尝试用其余的datainput转义“[”和“]”,但是这似乎也不起作用。我想我不太明白如何逃避一个网址。 – Castrona 2012-01-04 21:56:25
第一种情况(第一个代码块)怎么会不需要转义,并且它可以正常工作。使用第二个代码块会抛出一个错误“ ”。即使我逃避第二个查询,我仍然会收到此错误。 –
Castrona
2012-01-04 21:59:17