IIS 7.5を構成して、ASP.NETのURLで特殊文字を許可しようとしています。これは、新しいシステムで広く普及しているレガシーURLをサポートするために重要です。
サンプルURL: http://mydomain.com/FileWith%inTheName.html これはURLにエンコードされ、 http://mydomain.com/FileWith25%inTheName.html
これは、IIS 7.5。
ただし、WebサイトがASP.NETアプリケーションの場合、これは機能しません。 ASP.NETは、そのURLを指すと、常にWindowsAuthentication
ハンドラーからStaticFile
モジュールで400.0 - Bad Request
エラーを返します。ただし、要求されたURLが正しく表示され、正しい物理ファイルに正しく解決されます(サーバーエラーページの[物理パス]フィールドの情報は、物理的に使用可能なファイルを指します)。
これを有効にする方法についてのヒントがあるので、私はこれらのWebサイトの指示に従って段階的に実行しました。
2つ目は、実際には最初の投稿からの情報を要約し、x64システム(x64を実行しています)およびこのための追加のweb.config変更に関する情報を追加します。私はそれをすべて試しましたが、それでもasp.netWebアプリケーションからこれを実行することはできません。はい:レジストリの変更を適用した後、再起動しました。
それで、パーセンテージ文字を含むレガシーURLをサポートするために、上記の投稿で説明されている設定に加えて何をする必要がありますか?
追加情報:アプリケーションプールモードが統合されています。
数日後にプッシュ。誰にもわからない?
Windowsレジストリにすべての変更を加えた後、私はあなたのように立ち往生しました。アプリケーションプールモードをクラシックに変更すると、問題が修正されました。
「/」と「/」の間で「?」の前でない限り、アンパサンド記号シンボルは、それらを定義したRFCに至るまで、URIとURLの論理演算子です。次のようなものを使用するには、かなり一生懸命働く必要があります。
/request/to/path/?queryvar=value#nextval=value#next=val
ではなく:
/request/to/path/?queryvar=value&nextval=value
url_encoded値と生のASCII表現は非常にうまく機能します。たとえば、ASP.NETゲートウェイフィルターとして機能するRHOです。一般に、ASP.NETをコーディングするとき、コア構成モジュールまたはプラグインでない限り、IIS)を使用することはほとんどありません。ASP.NETはAPIで完全な状態カバレッジをサポートしています。
Web APIを使用するほとんどすべての言語は、URLエンコードされた文字の翻訳を自然にサポートします。ゲートウェイ要求を処理し、要求文字列を解析する小さなクラスを作成することは、レジストリでIISを操作するよりも、特別なシンボルを処理する簡単な方法です。
バッファオーバーフローを引き起こす可能性のある高レベルの文字制限に注意してください。高ビット文字と特定の繰り返し文字がオーバーフロー例外を許可しないことを確認してください。 U + 1000を過ぎた文字を入力できますが、実際に必要なのはU +0097またはその倍数で階層化された要求のみです。