私はREST APIを使用しており、ネイティブIISをインストールしてWindows 10でテストとプロトタイプ作業を行っています。 APIはC#で書かれています。私はIHttpHandlerから派生したクラスを作成し、それを基に私のAPIの名詞のクラスを実装しました。 (これにより、私の基本名詞クラスのログ、設定、監査などを共通化することができます)。動詞を実装するために、派生クラスはGET、POSTなどの基本クラスの関数をオーバーライドします。特定のパスに対してPUT、DELETE、またはPATCHの401.3アクセスが拒否されたIIS10
とにかく、私が持つ名詞の1つは、アプリケーションのログにアクセスするためのものです。これのパスは/ logです。その中で私はGETを実装し、ログを読み込み、DELETEを実行してログをクリアしました。 GETは正常に動作しますが、DELETEはIISから401.3を返します。 PUTまたはPATCHを試しても、同じ401.3が表示されます。 PUTとPATCHはLoggingクラスに実装されていないため、実装されていないメッセージを返す必要があります。 POST(PUTとPATCHが実装されていないのとまったく同じ方法で実装されていない)を試しても、実装されていないメッセージが表示されます。
この動作を絞り込む際に、特定の動詞がリクエストフィルタリングによってブロックされているかどうかを確認しました。私はProcess Monitorが基本的なパスでファイルシステムのアクセス拒否をキャッチしていたかどうかを確認しました(これは決してそれほどありませんでした)。別のハンドラマッピングを追加しようとしました - 最初のものとまったく同じですが、名前:私は/ログを上DELETE呼び出す場合、私は401.3を取得し、ポストマンを使用して
<ハンドラ>
<add name="BLOBRepoLog" path="log" verb="*" type="BLOBRepoService.Log" resourceType="Unspecified" preCondition="integratedMode" >
<add name="BLOBRepoLogSanityCheck" path="foo" verb="*" type="BLOBRepoService.Log" resourceType="Unspecified" preCondition="integratedMode" >
< /ハンドラ>
。/fooでDELETEを呼び出すと、正しく動作します。 PUTを/ logで呼び出すと401.3が得られます。/fooのPUTを呼び出すと、実装されていない正しいメッセージが表示されます。
誰かが、IISが/ logパスと呼ばれる動詞に対して特別な監視をしなければならない理由を知っていますか?入れて、削除同様の問題が働いていなかった
おかげで、 ポール