【发布时间】:2012-11-13 22:09:26
【问题描述】:
我正在调用一个 REST Web 服务,该服务执行 GET 以获取一些附件数据。它采用的参数是 SRNumber、External_Id、attachmentId 和 attachmentName。某些调用 URL 在浏览器中有效,但在我通过代码调用服务时不起作用。我正在测试的一个特别具有以下参数:
- SRNumber = 1000
- ExternalId = USERID7/27/2012 10:43:00 AM
- attachmentId = 1-2H1USPQ
- attachmentName = 文件名放在这里
这是使用 URL 编码参数格式化的 URL:
http://baseurl/service/CHD/Service_Record_Attachment_Query/SRNumber/1000/External_Id/USERID7%2F27%2F2012%2010%3A43%3A00%20AM/attachmentId/1-2H1USPQ/attachmentName/File%20name% 20goes%20here/
但是,当我尝试通过代码执行 GET 时,我收到了错误消息。似乎 Web 服务正在读取 URL 编码的“/”字符,就好像它是 URL 中的分隔符一样(我单步执行代码以验证在构建字符串时,External_Id 中的“/”是 URL 编码的.)
这是我用来构建 URL 字符串的代码:
requestURL = ConfigurationManager.AppSettings["Server"] +
ConfigurationManager.AppSettings["Service"] +
"Service_Record_Attachment_Query/SRNumber/" +
System.Uri.EscapeDataString(SRNumber) + "/External_Id/" +
(ExternalID.Equals(null) ? "" : System.Uri.EscapeDataString(ExternalID)) +
"/attachmentId/" + System.Uri.EscapeDataString(AttachmentID) +
"/attachmentName/" + System.Uri.EscapeDataString(AttachmentName) + "/";
构建请求字符串后,我使用它来创建 HTTPWebRequest:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestURL);
然后我收到一条错误消息,说附件不存在,因为它只搜索“USERID7”并排除了附件名称的其余部分。
我是否在代码中做错了可能导致“/”字符被解释为分隔符的问题?我不明白为什么我把调用URL放在浏览器中时它返回一个成功的响应,但是通过代码相同的调用URL返回一个错误。
【问题讨论】:
-
什么是目标网络服务器、IIS、Apache?
-
@CarlosLande,目标 Web 服务器是 IBM HTTP Server。