我正在调用一个 REST Web 服务,该服务执行 GET 以获取一些附件数据。它采用的参数是SRNumber、External_Id、attachmentId和attachmentName。某些调用 URL 在浏览器中有效,但在我通过代码调用服务时不起作用。我正在测试的一个特别是具有以下参数:
- SR 编号= 1000
- ExternalId = USERID7/27/2012 10:43:00 AM
- 附件ID = 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 时会返回错误。