【问题标题】:Invoking REST web service in browser versus in code yields different results在浏览器和代码中调用 REST Web 服务会产生不同的结果
【发布时间】:2012-11-13 22:09:26
【问题描述】:

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

标签: c# .net


【解决方案1】:

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

【讨论】:

  • 太好了,感谢您的帮助!看起来像“/”和“。”角色并没有像我预期的那样逃脱。我在创建请求时使用了 Uri 对象而不是字符串,对 Uri 类使用了这种解决方法,不允许转义的“/”字符:GETting a URL with an url-encoded slash,并为“。”添加了这种解决方法。出现在分隔符之前的字符:HttpWebRequest to URL with dot at the end
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2013-11-14
相关资源
最近更新 更多