2

我正在调用一个 REST Web 服务,该服务执行 GET 以获取一些附件数据。它采用的参数是SRNumberExternal_IdattachmentIdattachmentName。某些调用 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 时会返回错误。

4

1 回答 1

2

使用Fiddler之类的工具来查看浏览器和代码案例中实际通过网络线路传递的内容。浏览器可能会双重转义 URL 中的“/”字符,或者您的代码可能没有按照您认为的方式转义它。查看网络上的 HTTP 请求应该会告诉您很多信息。

于 2012-11-14T00:25:56.110 回答