这是一篇关于用于抑制某些请求的表单身份验证的模块的帖子。这个想法是模块在 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 中不可抑制,那么该代码应该如何抑制表单身份验证重定向?