我有一个我用C#调用的Web服务。我已经能够使用简单的GET查询成功获得响应,例如:
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; ... etc)
非常感谢您对此问题的任何帮助。
编辑:这就是我调用网络服务的方式
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;
答案 0 :(得分:0)
你的'='登录“[key1 = val1,val2,val3; key2 = val4; key3 = val5]”将需要双重转义。尝试转义datainputs的值,然后转义完整的URL。