これは、特定のリクエストに対してフォーム認証を抑制するためのモジュールに関する投稿です。アイデアは、モジュールが web.config に登録されているため、リクエストごとにInit()
呼び出されるということです。
public void Init(HttpApplication context) {
context.PostReleaseRequestState += OnPostReleaseRequestState;
context.EndRequest += OnEndRequest;
}
次に、リクエストが IIS パイプラインの終わりに近づくと、EndRequest
イベントが発生し、次のコードが呼び出されます。
private void OnEndRequest(object source, EventArgs args) {
var context = (HttpApplication)source;
var response = context.Response;
if (context.Context.Items.Contains(SuppressAuthenticationKey)) {
response.TrySkipIisCustomErrors = true;
response.ClearContent();
response.StatusCode = 401;
response.RedirectLocation = null;
}
}
SuppressAuthenticationKey
コードの他の部分は先に呼び出され、で設定されていることを保証しcontext.Context.Items
ます。
これで、IIS ソース (調査用に入手可能) を入手できました。実装がFormsAuthenticationModule
あり、サブスクライブしEndRequest
、その要求のハンドラーは、HTTP 401 コードで終了したすべての要求を忠実にリダイレクトします。
コードを見るだけでなく、このように動作することもわかります。これには何の量.RedirectLocation = null
も影響しません。
IIS でリダイレクトが抑制できない場合、そのコードはどのようにフォーム認証リダイレクトを抑制しますか?