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中不可執行,該代碼應該如何抑制表單身份驗證重定向?
我沒有遇到過這個特殊的問題 - 雖然很有趣。不完全確定這是否有用或有幫助,但已發現這種屬性,暗示在某些情況下允許/可用/可能/需要抑制被允許/可用/ http://msdn.microsoft.com/en-us/library/system.web.httpresponse .suppressformsauthenticationredirect.aspx您正在檢查哪個版本的IIS資源,或許它只在IIS 7.5或8中受支持,儘管我只是猜測? – bUKaneer 2013-02-19 11:22:35
@bUKaneer:你提到的屬性出現在.NET4.5開始,我正在評估版本4,所以它尚不可用。 – sharptooth 2013-02-19 11:40:22
@bUKaneer:神祕解決了。 – sharptooth 2013-02-20 05:15:21