0

内部のRedmineサーバーでは、HTTPS経由でのみ接続できます。.NETからHTTPS経由でRESTAPIを使用しようとした方法は次のとおりです。

  1. .NETでのRESTAPIの使用で提案されているように、ホスト変数を"https://redmine.company.com/redmine/"に、apiKeyをに設定します"ffffffffffffffffffffffffffffffffffffffff"
  2. 次のコードで最初から:

    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.comffffffffffffffffffffffffffffffffffffffff私のアカウントページの実際のAPIキーの単なるプレースホルダーです。両方の試行は、WebExceptionでタイムアウトする前にしばらくハングします(試行2のハングここのコメントを参照してください)。次に、Redmineサーバーから他のもの(time_entries.csv、アトムフィードなど)をダウンロードしようとしましたが、毎回まったく同じ結果になりました。

これまでのところ悪い。ただし、URLをコピーhttps://redmine.company.com/redmine/issues/149.xml?key=ffffffffffffffffffffffffffffffffffffffffしてブラウザに貼り付けると、期待どおりの応答が得られます。そのため、Redmineサーバーは正常に動作しているように見えますが、どういうわけか.NETからサーバーを動作させることができません。

私は他のHTTPSサイトからコンテンツを正常にダウンロードし、http://demo.redmine.orgから試行2のコード(もちろん、適合したURLなど)を使用して問題データをダウンロードすることができました。したがって、RedmineがHTTPSを介して通信する方法について何か特別なことがあるようです。

誰かが.NETからHTTPS経由でRedmineRESTAPIを正常に使用している場合、私が間違っていることについてのいくつかのポインタに本当に感謝します。

また、クライアント側からこれをデバッグする方法についての提案をいただければ幸いです。これまでのところ、Fiddler2を試しましたが、成功しませんでした。「HTTPSトラフィックの復号化」設定を有効にするとすぐに、InternetExplorerでリクエストを行っても回答が得られなくなります。

4

3 に答える 3

1

HTTP/S 接続と API キーに基づく認証をサポートするredmine-net-apiを使用します。


        RedmineManager rm = new RedmineManager("https://<your-address>", <api-key>, "random-password");
        IList<Issue> issues = rm.GetObjectList<Issue>(new NameValueCollection() { { "project_id", <project-id> } });
于 2012-05-18T16:12:36.130 に答える
0

私の場合、パラメータSecurityProtocolType.Tls12に値を明示的に渡すことで問題が解決しました。securityProtocolType

RedmineManager redmineManager = new RedmineManager(_host, _apiKey, 
    securityProtocolType: SecurityProtocolType.Tls12);
于 2016-08-26T11:23:47.823 に答える
0

これを試してください、それは私のために働きます:

// Allow every secure connection
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => true;

// Create redmine manager (where URL is "https://10.27.10.10/redmine" for me and redmineKey is my redmine API key
RedmineManager redmineManager = new RedmineManager(redmineURL, redmineKey);

// Create your query parameters
NameValueCollection queryParameters = new NameValueCollection { { "project_id", "4" }, {"tracker_id", "17"}, { "offset", "0" } };

// Perform your query
int issuesFound = 0;
foreach (var issue in redmineManager.GetObjectList<Issue>(queryParameters, out issuesFound))
{
// By default you get the 25 first issues of the project_id and tracker_id specified.
// Play with the offset to get the rest
queryParameters["offset"] = ....
}
于 2015-10-02T07:40:55.323 に答える