Whi*_*uit 21 asp.net-mvc razor
我得到了Runtime error与防伪属性相关的信息.
执行以下步骤:
错误: The provided anti-forgery token was meant for a different claims-based user than the current user.
可以采取哪些措施来防止发生此错误?
jul*_*gon 32
我刚才遇到了同样的问题,并通过禁用登录视图的缓存来解决它.它实际上很有意义,并且不需要代码或异常处理.
我的登录控制器方法现在看起来像这样:
[AllowAnonymous]
[OutputCache(NoStore = true, Location = OutputCacheLocation.None)]
public ActionResult LogOn(Uri returnUrl)
Run Code Online (Sandbox Code Playgroud)
当禁用缓存并且用户单击浏览器上的后退按钮时,将向服务器发出新请求,并再次传递页面,并将防伪签名设置为正确的用户.
我觉得这是一个更清洁,更简单和合理的方法来解决问题.
Row*_*man 23
这是忽略错误并将用户返回登录屏幕的一种方法.这只是一个例子.
创建一个名为HandleAntiforgeryTokenErrorAttributeinherited 的新类HandleErrorAttribute.覆盖该OnException方法.
public class HandleAntiforgeryTokenErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(new { action = "Login", controller = "Account" }));
}
}
Run Code Online (Sandbox Code Playgroud)
转到您的FilterConfig班级并将该属性注册为全局过滤器.
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new HandleAntiforgeryTokenErrorAttribute()
{ ExceptionType = typeof(HttpAntiForgeryException) }
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13345 次 |
| 最近记录: |