【问题标题】:one controller action does not respond to AllowAnonymous一个控制器操作不响应 AllowAnonymous
【发布时间】: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


【解决方案1】:

检查您是否在 VerifyCode.cshtml razor 视图中调用了子操作,匿名用户不允许这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多