一个控制器操作不响应AllowAnonymous

时间:2016-07-11 10:37:11

标签: asp.net asp.net-mvc authentication

我在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创建一个框架控制器操作/视图,它按预期工作。

我没有使用过滤器或任何自定义属性。什么可能导致这一行动以这种特殊的方式表现?

1 个答案:

答案 0 :(得分:2)

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