【发布时间】:2013-02-19 10:56:22
【问题描述】:
Here's a post 关于用于抑制某些请求的表单身份验证的模块。这个想法是模块在 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 中不可抑制,那么该代码应该如何抑制表单身份验证重定向?
【问题讨论】:
-
我之前没有遇到过这个特殊问题——不过非常有趣。不完全确定这是否有用或有帮助,但已发现此属性暗示在某些情况下允许/可用/可能/需要抑制msdn.microsoft.com/en-us/library/…您正在查看哪个版本的 IIS 源,可能仅在 IIS 7.5 中受支持还是 8 虽然我只是猜测?
-
@bUKaneer:你提到的属性是从 .NET4.5 开始出现的,我正在审查第 4 版,所以它还不可用。
-
@bUKaneer:谜团解开了。
标签: asp.net .net iis forms-authentication