2017-05-24 22 views
0

私は、サードパーティAPIの情報を内部データウェアハウスにプルするサービスを構築することを任されています。彼らは、クエリ文字列を介して必要なパラメータを指定する場所で、必要なデータを取得するリクエストを受け取ります。例えば。私のコードでGet request URLのHttpWebRequestの最大長

http://www.api.com?parameter=firstname&parameter=surname

URLの長さが3600文字を超える長い要件が116個のパラメータのためであるようです。

私のウェブ要求は、このコードを使用して生成される

private HttpWebRequest GetWebRequest(string url, string type, int timeout) 
    { 
     var httpWebRequest = (HttpWebRequest) WebRequest.Create(_baseUrl + url); 
     httpWebRequest.Method = type; 
     httpWebRequest.Timeout = timeout;    
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Headers.Add("Authorization", "Bearer " + _token.access_token); 
     httpWebRequest.ContentLength = 0; 

     return httpWebRequest; 
    } 

私は内部例外メッセージと「リモートサーバーに接続できません」というメッセージでWeb例外を取り戻す午前のコードを実行すると"ターゲットマシンが積極的にIPアドレスを拒否したため、接続できませんでした"

URLをコピーしてPostmanに貼り付けてリクエストを実行すると、この記事のURL全体が表示されませんでした私が期待しているレスポンスなので、URLが正しくフォーマットされていることがわかります。また、URLの長さを約2100文字に減らすと、要求が機能することも発見しました。

私は検索していますが、URLの長さに制限があることを示唆する明確な文書は見つかりませんでしたが、URL全体がPostmanでは動作するが、ac#Web要求では動作しない理由を説明できません。私はURLの長さをカットすると、Webリクエストで動作します!

誰かがこれについてのアイデアを持っているなら、私はすばらしいでしょう。

答えて

0

old postは、サーバーとクライアントに応じて、最大要求の長さが2〜4〜8 KBの範囲にあることを示しています。これは、観測値と一致しています。

郵便配達員は「別の」クライアントなので、あなたのプログラムには含まれていませんが、そこではうまく動作する可能性があります。結論は:GETそのような長い要求ではいけません。代わりにPOSTする必要があります。サービスを制御できる場合は、POSTもサポートされるように変更することができます(まだ文書化されていない場合)。