【发布时间】:2016-11-13 06:37:16
【问题描述】:
我在 MVC 应用程序中遇到了一些奇怪的身份验证行为。所有控制器都继承自一个 BaseController,它用 [Authorize] 属性修饰。然后,在登录页面中,我用 [AllowAnoymous] 装饰动作。
因此,例如,无论用户是否登录,这都是免费的。
[AllowAnonymous]
public ActionResult ForgotPasswordConfirmation()
{
return View();
}
如果我从该控制器操作中删除 [AllowAnonymous] 属性并尝试导航到它,然后我会被发送回登录页面,我会看到 URL 自动将 ReturnUrl 参数附加到 QueryString。
但是,我有另一个具有相同属性的控制器操作:
[AllowAnonymous]
public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe)
{
return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe });
}
我的应用程序绝对不会为未登录的用户呈现此视图,即使它被 [AllowAnonymous] 修饰。我不能为我的生活弄清楚为什么。但是,我注意到当您尝试导航到它时,不会生成 ReturnUrl。
我想这是意料之中的,因为它应该允许匿名用户。但事实并非如此。我已经尝试创建一个带有和不带有 AllowAnonymous 的骨架控制器操作/视图,它按预期工作。
我没有使用过滤器或任何自定义属性。是什么导致这一动作以如此奇特的方式表现?
【问题讨论】:
-
如果你在
VerifyCode方法里面放了一个断点,它会被命中吗? -
@haim 是的。我已经设法将问题追溯到视图中的布局。设置为 null 并且控制器操作起作用。我认为回答者的答案是正确的
标签: asp.net asp.net-mvc authentication