ブラウザーで発行された要求は大丈夫でしたが、同じマシン上のASP.NETアプリケーションで発行された要求は処理されませんでした

私はCassiniの異なるインスタンスの下で同じマシン上で実行されている2つのASP.NETアプリケーションをデバッグしており、「カスタムエラー」はオフになっています。 1つのアプリケーションがポート100で動作していて、ポート90で動作している他のアプリケーションから GET リクエストを実行したいと考えています。

WebRequest request = WebRequest.Create(
   "http://localhost:90/Controller/Action?Param1=foo&Param2=bar");
request.Timeout = 10000;
request.GetResponse();

最後の行は HTTP 400 コードとnull InnerExceptionで WebException をスローします。クリップボードに同じURLをコピーして同じマシン上のIEにコピーすると、要求はポート90のアプリケーションにキューイングされ、/Controller/Action/が呼び出され、パラメータも大丈夫です。

ここでの問題の原因は何か、どうすれば解決できるのでしょうか?

1
@ Jason:私のせいで、パスに既に http:// という接頭辞があり、InnerExceptionがnullの場合、質問を更新しました。
追加された 著者 sharptooth,
HTTP400が不正なリクエストです - 'http:// localhost:90 ...'を試してください。また、内部の例外は何ですか?あなたはデバッガを介して要求しているアプリケーションを実行できますか?
追加された 著者 Jason,
あなたはCassiniではなくIISを使ってこれをテストできますか? Iveは過去に、2つの動作が異なる問題がありました。あなたのアプリケーションが本番環境で使用されるなら、私はあなたがIISを使用すると推測しています。
追加された 著者 WooHoo,

3 答え

私はあなたがurlのparamsなしで試みるべきだと思います。

WebRequest request = WebRequest.Create("localhost:90/Controller/Action");
request.Timeout = 10000;
request.GetResponse();

それがうまくいくなら、あなたはparamsの使用を可能にするいくつかのユーザーエージェントヘッダーを追加する必要があります。

また、おそらくWebClientを見てください。 MSDN

個人的には、IISExpressやIISを使ってこの種のソリューションを開発してみます。

ここの外部者の見解では、ブラウザからのajax呼び出しによって2番目のwebメソッドを呼び出すことを検討し、javascript(jQuery)を使用してクライアントの結果を集約します。

1
追加された

私は、 URIオブジェクトをとるWebRequest.Createのオーバーロードを使用しようと試みます。、そのようにして、あなたは脂肪指向のURLを除外することができます。

1
追加された

2時間のデバッグ - ポート90のサービスは、要求をポート100のサービスにリダイレクトしますが、URLに必要なパラメータを提供しないため、ポート100のサービスのハンドラは例外をスローし、 GetResponse()で報告されたHTTP 400を返します。リダイレクトがこの特定の要求に意味をなさないため、この特定の要求にはリダイレクトがないようにロジックを変更するというソリューションでした。

そして、陪審員は、CassiniとASP.NETの両方が無罪であると判断します。

0
追加された