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; 
+0

第一种情况(第一个代码块)怎么会不需要转义,并且它可以正常工作。使用第二个代码块会抛出一个错误“”。即使我逃避第二个查询,我仍然会收到此错误。 – Castrona 2012-01-04 21:59:17

你 '=' 的招牌 “[键1 = VAL1,VAL2,VAL3;键2 = VAL4; KEY3 = val5]”将需要双重逃脱。尝试转义datainput的值,然后转义完整的URL。

+0

我试图逃避“[”和“]”中的所有内容,然后将其添加到查询的其余部分并再次转义,但这似乎也不起作用。我也尝试用其余的datainput转义“[”和“]”,但是这似乎也不起作用。我想我不太明白如何逃避一个网址。 – Castrona 2012-01-04 21:56:25