我们内部的 Redmine 服务器只允许我通过 HTTPS 连接。以下是我尝试通过 .NET 中的 HTTPS 使用 REST API 的方法:
- 正如将 REST API 与 .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 站点下载了东西,并设法从http://demo.redmine.org下载了带有尝试 2 代码的问题数据(当然还有经过调整的 URL 等)。因此,Redmine 如何通过 HTTPS 进行通信似乎有些特别之处。
如果有人通过 .NET 的 HTTPS 成功使用 Redmine REST API,我将非常感谢一些关于我做错了什么的指示。
此外,将不胜感激有关如何从客户端进行调试的建议。到目前为止,我已经尝试过 Fiddler2,但没有成功。一旦我启用它的“解密 HTTPS 流量”设置,当我在 Internet Explorer 中发出请求时,我就不再得到答案。