【发布时间】:2014-10-06 15:47:29
【问题描述】:
我想通过需要这样的 uri 的 web 服务进行创建:
http://<url>/webservice.php?operation=<operation>&elementType=<elementType>&element=<element>&
我的问题是,元素是带有html正文的电子邮件的所有信息,大约6000个字符。
我想这样调用网址:
var request = WebRequest.Create(urlToUse.ToString());
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = urlToUse.Length;
var requestStream = request.GetRequestStream();
var requestStreamWriter = new StreamWriter(requestStream);
requestStreamWriter.Write(urlToUse);
requestStreamWriter.Close();
var response = request.GetResponse();
var responseStream = response.GetResponseStream();
if (responseStream == null) return null;
var responseStreamReader = new StreamReader(responseStream);
var responseFromServer = responseStreamReader.ReadToEnd();
responseStreamReader.Close();
responseStream.Close();
response.Close();
但它会中断
var response = request.GetResponse();
并说 uri 太长。
我无法更改服务器的 url 最大长度,并且 web 服务需要 url 中的参数。
我还没有找到适合我的解决方案,因此不胜感激。
更新:
对于面临相同问题的任何人,对我有用的解决方案是将我的查询放入一个字节数组中,例如
var encoding = new UTF8Encoding();
byte[] bytes = enconding.GetBytes((queryString));
并将其写入 webrequest 而不是我的 queryString
var stream = request.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
【问题讨论】:
-
您使用的是
POST,为什么不在请求正文中传递信息? -
您似乎对 GET 和 POST 如何工作以及在代码中混合使用两者感到困惑。如果您通过 POST 发送数据,则不需要将它们作为查询参数包含在内。
-
如果我将信息添加到正文中,如何将它们放在 url 之后,以便 web 服务执行应有的操作?
标签: c# web-services webrequest