我試圖在我的MVC3應用程序中授權ajax操作方法。當用戶會話過期並且要求執行ajax操作方法時會出現問題。 asp.net身份驗證系統發送302重定向,而不是發送401,這對於非Ajax請求似乎是合乎邏輯的。但是隨着Ajax的發展,它們很快就會混亂起來。所以我決定按照ASP.NET MVC forces an AJAX request be redirected to the login page when the FormsLogin session is no longer active建議的方法。 基本上,在請求結束時,我們檢查請求是否是ajax請求,並且存在重定向(302響應)。如果是,那麼我們將響應代碼從302更換爲401.因此,在JavaScript中,我們檢查401並從那裏執行重定向。這裏是我都忍了在Ajax上授權屬性控制器中的操作方法
在Global.asax.cs中的基本代碼
protected void Application_EndRequest() {
var context = new HttpContextWrapper(Context);
// If we're an ajax request, and doing a 302, then we actually need to do a 401
if (Context.Response.StatusCode == 302 && context.Request.IsAjaxRequest()) {
Context.Response.Clear();
Context.Response.StatusCode = 401;
}
}
jQuery的全局錯誤處理程序(包括在asp.net mvc的母版頁:_Layout.cshtml)
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
if (jqXHR.status == 401) {
window.location.replace(loginUrl);
}
});
我剛剛很快測試了這段代碼,它似乎工作正常。這段代碼是否有任何潛在的問題。就asp.net mvc和jquery而言,我是一個相對新手的程序員,所以我想在實際執行代碼之前我會詢問其他意見。
感謝您的鏈接。我想我會採用博客中提出的方法。我安裝了相同的Nuget包,它似乎工作正常。 – Jatin
@Nirvan,太棒了。我很高興你採用了這種方法。 –