【发布时间】:2012-05-15 08:51:21
【问题描述】:
我们的内部 Redmine 服务器只允许我通过 HTTPS 连接。以下是我尝试通过 .NET 中的 HTTPS 使用 REST API 的方法:
- 按照Using the REST API with .NET 中的建议,将主机变量设置为
"https://redmine.company.com/redmine/",将apiKey 设置为"ffffffffffffffffffffffffffffffffffffffff"。 -
使用以下代码从头开始:
using System.IO; using System.Net; class Program { static void Main(string[] args) { ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => true; var request = (HttpWebRequest)WebRequest.Create( "https://redmine.company.com/redmine/issues/149.xml?key=ffffffffffffffffffffffffffffffffffffffff"); request.CookieContainer = new CookieContainer(); request.Method = "GET"; using (var response = request.GetResponse()) // Hangs here using (var responseStream = response.GetResponseStream()) using (var memoryStream = new MemoryStream()) { responseStream.CopyTo(memoryStream); } } }
当然,company.com 和 ffffffffffffffffffffffffffffffffffffffff 只是我的真实公司的占位符和我的帐户页面上的真实 API 密钥。两次尝试都会挂起一段时间,然后超时并出现 WebException(请参阅尝试 2 中的 Hangs here 注释)。然后我尝试从 Redmine 服务器下载其他内容(例如 time_entries.csv、atom feed 等),每次都得到完全相同的结果。
到目前为止很糟糕。但是,如果我将 URL https://redmine.company.com/redmine/issues/149.xml?key=ffffffffffffffffffffffffffffffffffffffff 复制粘贴到我的浏览器中,我会得到我期望的响应。所以,看起来我们的 Redmine 服务器的行为应该是正常的,但不知何故我无法让它在 .NET 上工作。
我已经成功地从其他 HTTPS 站点下载了东西,并设法使用尝试 2 的代码从http://demo.redmine.org 下载了问题数据(当然还有经过调整的 URL 等)。因此,Redmine 如何通过 HTTPS 进行通信似乎有些特别。
如果有人通过 .NET 的 HTTPS 成功使用 Redmine REST API,我将非常感谢您指出我做错了什么。
此外,我们将不胜感激有关如何从客户端进行调试的建议。到目前为止,我已经尝试过 Fiddler2,但没有成功。一旦我启用它的“解密 HTTPS 流量”设置,当我在 Internet Explorer 中发出请求时,我就不再得到答案。
【问题讨论】: