我在我的asp.net mvc應用程序中覆蓋了HandleUnauthorizedRequest
方法,以確保它向未經授權的Ajax調用發送401響應,而不是重定向到登錄頁面。當我在本地運行它時,它的工作狀態非常好,但是我部署到IIS後,我的重寫方法不會被調用。調試點根本不打我的方法,並立即被重定向到登錄頁面。部署到IIS後,自定義授權屬性不起作用
這是我的代碼:
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
filterContext.Result = new JsonResult
{
Data = new
{
success = false,
resultMessage = "Errors"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.HttpContext.Response.End();
base.HandleUnauthorizedRequest(filterContext);
}
else
{
var url = HttpContext.Current.Request.Url.AbsoluteUri;
url = HttpUtility.UrlEncode(url);
filterContext.Result = new RedirectResult(ConfigurationManager.AppSettings["LoginUrl"] + "?ReturnUrl=" + url);
}
}
}
,我有我的控制器的頂部聲明屬性[AjaxAuthorize]
。一旦將它部署到IIS後有什麼不同?
更新: 下面是我的測試,這是非常簡單的,甚至不管它是一個Ajax請求或一個簡單的頁面刷新後登錄會話已過期 -
- 我部署將該網站放到我的本地IIS上
- 登錄網站,進入主頁 - 「/ Home」
- 右鍵單擊「註銷」鏈接,「在新選項卡中打開」 - 確保主頁仍在當前標籤上打開,而 會話被記錄ou噸。
- 刷新主頁。現在在這裏,調試點應該打開我覆蓋的
HandleUnauthorizedRequest
方法,並通過 if/else條件,然後將我重定向到登錄頁面。但它 不!它只是簡單地重定向到登錄頁面。我是 認爲它甚至沒有考慮我的自定義授權屬性。
但是,當我從Visual Studio運行該網站時,一切正常,控制進入我的覆蓋方法的調試點,並通過if/else條件。
'一旦部署到IIS後會有什麼不同?'''ConfigurationManager.AppSettings [「LoginUrl」]' - 你檢查了你的配置文件嗎? – NightOwl888
是的,我檢查,它指向「帳戶/登錄」。但問題是,在部署到IIS後,即使我完全刪除了「LoginUrl」的配置設置,它仍然會重定向到「帳戶/登錄」,該控件甚至不會輸入我的自定義屬性的'HandleUnauthorizedRequest'方法只有在我部署之後。我嘗試在調試和發佈配置中部署,但同樣的問題 –