HttpHanlder処理404:File not foundの使用

2731 ワード

一:シーン
何らかの理由でasp.Netエンジンは、発生する可能性のあるすべての無効なURLのRequestを処理します. 
二:現状
無効なURLの場合、IISによって通常404エラーが返される.もちろん、Custom Error Pageをカスタマイズすることもできますが、この場合、元のURLが表すRequestのデータ(フォームデータなど)を処理することはできません.Applicationで直接BeginRequestではこのリクエストを処理していますが、IISが「Verify that file Exists」を処理している場合、実際にはそのリクエストはApplication_BeginRequestヒット(Fire). 
三:解決策
1:webの準備をする.configは、次の構成を行います.
"FolderTest">
  
    
      "*" path="*" type="YourNamespace.YourHandler"/>
    
  
  
    
      "testyou" verb="*" path="*" type="younamespace.youHandler" resourceType="Unspecified"/>
    
  

いくつか説明が必要です.
1)システムに詳しい.WebとシステムWebServerの友人は、後者がiis 7以上の統合モードの構成項目であることを知っているに違いありません.このホスト条件を満たさないと、IISは自動的にこの構成を無視し、前者の構成ノードを採用します.
2)この構成により、iis 7以上の統合モードのサイトは、FolderTestパスの下のすべての404 Requestを処理できるようになった.
3)resourceType="Unspecified"は、file and folderなど、すべての要求を処理するために使用されます.ファイルurlを処理している場合は、この構成プロパティは必要ありません.
4)path="*"はwildcard httphandlerであることを示している.
5)上記構成のFolderTestのようなサブディレクトリのすべての要求を処理するのではなく、ルートディレクトリのすべての404要求を処理する場合は、location構成セクションを削除します.
 
2:iis 7以上の統合モードを処理する場合
例えば、残念ながらII 6を使用している場合は、IISで「Verify that file Exists」を非構成状態に設定する必要があります.iis 6を例にとると、次のような操作ができます.
1:)サイト構成ノードを開く
コンフィギュレーションをクリックします.
2:)次に、表示される画面の下半分、すなわち「Wildcardアプリケーションmaps」の部分で、「Insert」をクリックすると、次の図が表示されます.
aspnet_をisapi.dllを配置し、「Verify that file exists」をフックしないでOKします. 
これで世界は静かになった.クライアントが存在しないURLを送信しても、フォームデータなど、希望するRequestのデータをHttpHandlerで処理できます.