私のasp.net mvcアプリでは、特定のURLが有効な応答を返すかどうかを確認したいと考えています. そのため、HttpWebRequest.GetResponse() をテストするメソッドに URL を送信します。
私の開発サーバー (vs2008) では問題なく動作します。ただし、本番サーバーにデプロイすると、Bad Request が返されます。メソッドがヒットすることはなく、asp.net カスタム エラー ページは使用されません。
何か案は?
私のasp.net mvcアプリでは、特定のURLが有効な応答を返すかどうかを確認したいと考えています. そのため、HttpWebRequest.GetResponse() をテストするメソッドに URL を送信します。
私の開発サーバー (vs2008) では問題なく動作します。ただし、本番サーバーにデプロイすると、Bad Request が返されます。メソッドがヒットすることはなく、asp.net カスタム エラー ページは使用されません。
何か案は?
今後これを読む人のために: http:// の部分を削除し、HttpUtility.UrlPathEncode を使用してパスをエンコードし、最後の部分を {*uri} とするルートを設定しました。これにより、パラメーターで / を使用できるようになります。
次に、checkUri に http:// を追加して uri を再作成し、この uri のホストが想定したホスト (私の例では request.url.host) であるかどうかを確認します。
次に、作成した Uri を使用して httpwebrequest を作成し、リクエストの応答を確認します。
おそらく、ASP.NETのValidateRequest機能を実行していませんか? 問題のページでこれを無効にするには、aspx ファイルの最初の行を変更して ValidateRequest="false" パラメーターを指定します。
例:
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" ValidateRequest="false" %>
ただし、リクエストの検証は XSS 攻撃を防ぐのに役立つため、おそらくその状態のままにしたくないでしょう。まだ使用していない場合は、HttpUtility.UrlEncode を使用することも試してみる価値があります。