关于@Html.AntiForgeryToken()

Regarding the @Html.AntiForgeryToken()

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

我有一个 class,我会查看用户是否在角色 "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 时,我得到了错误

An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code

The server can not add a header after HTTP headers have been sent.

这可以通过删除@Html.AntiForgeryToken()

来解决

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

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

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

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

我通过更改

解决了它
Response.Redirect("rolenotfound");
        return View();

 return PartialView("rolenotfound");

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