Asp.net mvc ASP.NET MVC Authorize属性在IE和FireFox中的行为不同
第一件事:这只是一个样本。这不是一个关于这是否是进行身份验证的有效方法的问题 基本上,我有一些奇怪的行为,这取决于所使用的浏览器。在Firefox中,一切都如预期的那样工作,但在IE上,即使授权失败,仍会触发相关的控制器操作 我设置了一个ASP.NET MVC测试站点,其中SecureController类继承自标准控制器类,并具有以下相关代码:Asp.net mvc ASP.NET MVC Authorize属性在IE和FireFox中的行为不同,asp.net-mvc,asp.net-mvc-2,authorization,Asp.net Mvc,Asp.net Mvc 2,Authorization,第一件事:这只是一个样本。这不是一个关于这是否是进行身份验证的有效方法的问题 基本上,我有一些奇怪的行为,这取决于所使用的浏览器。在Firefox中,一切都如预期的那样工作,但在IE上,即使授权失败,仍会触发相关的控制器操作 我设置了一个ASP.NET MVC测试站点,其中SecureController类继承自标准控制器类,并具有以下相关代码: [AuthorizeByToken] public class SecureController : Contrller protected ove
[AuthorizeByToken]
public class SecureController : Contrller
protected override void OnAuthorization(AuthorizationContext filterContext)
{
// Check for presence of encoded session string
if (filterContext == null) throw new ArgumentNullException("filterContext null");
if (filterContext.HttpContext == null) throw new ArgumentNullException("httpContext null");
if (filterContext.HttpContext.Request["TestToken"] == null) return;
// Complete authorization
FormsAuthentication.SetAuthCookie(csmSession.CSMUser.userName, true);
base.OnAuthorization(filterContext);
}
还有一个基于AuthorizeAttribute的AuthorizeByTokenAttribute属性,如下所示:
public class AuthorizeByTokenAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/");
filterContext.ActionDescriptor = null;
base.HandleUnauthorizedRequest(filterContext);
}
}
例如,当您访问它时,它在Firefox中的工作方式与预期一致。它进入授权代码,失败并重定向到根目录。在IE中,它进入授权代码,仍然失败,下一步是运行TestSecureController的Index()操作
有人能提供一些关于为什么这样的东西会依赖于浏览器的见解吗?我使用几种不同的方法测试了您的Uri路由方案,并消除了这一问题。这在两种浏览器上都是等效的。我对这类事情极度偏执 因此,我倾向于认为是cookie的行为或状态在两个浏览器实例中有所不同。请尝试以下操作:
中使用此代码片段以明文形式查看cookie,并通过联系人表单向我发送电子邮件。如果cookie的内容相同,请转至步骤4
有几个问题:1。Index()操作方法不是这个控制器的根吗?2.您是否试图重定向到整个网站的根目录,而不是使用此属性修饰的任何SecureContoller?因此,您建议RedirectResult(“/”)重定向到控制器的根目录,而不是网站?我不会想到它会以这种方式工作,或者它会破坏路由的工作方式。如果我错了,请纠正我。无论如何,这肯定是一种完全包含服务器的行为,不会受到浏览器选择的影响?我只是想在打开引擎盖并回答您的问题之前了解您的目标。我的直觉是,您的问题存在于两个方面之一:每个浏览器如何处理相对URI,以及Cookie行为如何在每个浏览器中工作。我现在正在做一个实验来消除或确认第1项。是的,URI不是问题所在——完全是服务器端的问题。