我在我的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'方法只有在我部署之后。我尝试在调试和发布配置中部署,但同样的问题 –