我在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创建一个框架控制器操作/视图,它按预期工作。
我没有使用过滤器或任何自定义属性。什么可能导致这一行动以这种特殊的方式表现?
答案 0 :(得分:2)
检查您是否在VerifyCode.cshtml
剃刀视图中调用了子操作,匿名用户不允许这样做。