关于@ Html.AntiForgeryToken()

时间:2016-04-27 12:08:24

标签: c# redirect antiforgerytoken

所以我想知道antiForegryToken有多重要,因为它给我带来了一些问题。

我有一个班级,我看看用户是否在角色“PremiumAnvändare”(它是瑞典语中的PremiumUser),如果不是,我将它们重定向到“rolenotfound”。

public ActionResult Create()
    {

        if (User.IsInRole("PremiumAnvändare"))  
        {
            ViewBag.SammanhangsID = new SelectList(db.Sammanhangs, "SammanhangsID", "Namn");
            return View();


        }
        Response.Redirect("rolenotfound");
        return View();
    } 

但是当用户被重定向到rolenotfound时,我得到了错误

  

发生了'System.Web.HttpException'类型的异常   System.Web.dll但未在用户代码中处理

     

在发送HTTP标头后,服务器无法添加标头。

通过删除@ Html.AntiForgeryToken()

解决了这个问题。

我做错了什么或者可以删除令牌吗?我对它进行了一些调查,我知道这是为了抵御跨站点攻击,但我不相信这会成为一个问题,因为我们正在制作移动应用程序。但是请纠正我并教我,这样我才能做到这一点。

2 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是您在重定向后没有结束您的回复。 Response.Redirect("rolenotfound");Response.Redirect("rolenotfound", true);之间的区别在于,第二个将中止线程并阻止执行return View();

我假设,虽然执行了重定向,return View();将执行并抛出System.Web.HttpException

CSRF在我看来非常普遍(至少如果你有一个对攻击者有吸引力的应用程序),但没有人会告诉你是否需要这种保护 - 你必须自己决定。

答案 1 :(得分:0)

我通过改变

解决了这个问题
Response.Redirect("rolenotfound");
        return View();

 return PartialView("rolenotfound");

这并没有妨碍我使用防伪标记,但是在这种情况下不包括布局,但这在我的项目中不会成为问题。