【问题标题】:ValidateAntiForgeryToken in override controller覆盖控制器中的 ValidateAntiForgeryToken
【发布时间】:2013-09-29 14:42:49
【问题描述】:

我有三个控制器,但 Controller1 继承自 Controller2 和 Controller2 继承自 Controller3。

例如

public class Controller1 : Controller
{
    [HttpPost]
    [ValidateAntiForgeryToken()]
    public virtual ActionResult Create(MyClass test)
    {
...

public class Controller2 : Controller1
{
...

public class Controller3 : Controller2
{
    [HttpPost]
    [ValidateAntiForgeryToken()]
    public override ActionResult Create(MyClass test)
...

也在视图中添加

@Html.AntiForgeryToken()

当有一个控件并且没有继承的好工作,但是当使用继承和覆盖方法时,ValidateAntiForgeryToken 会出错。

validationAntiforgeryToken 无效并报错:

所需的防伪表单字段“__RequestVerificationToken”是 不存在。

[HttpAntiForgeryException (0x80004005): 所需的防伪表单 字段“__RequestVerificationToken”不存在。]

...

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 antiforgerytoken overriding


    【解决方案1】:

    您的问题不在于您的控制器层次结构,而是因为您的请求中没有 AntiForgeryToken(如错误所示)。

    为此,请将以下内容添加到发布到控制器的视图(表单内)中:

    @Html.AntiForgeryToken()
    

    【讨论】:

    • 您确定在表单中添加了它吗?
    • 是的,我相信你可以在你有一个控制器并且没有从其他控制器继承的情况下进行测试,但在继承得到错误验证时可以进行测试
    • 哦,我发现问题了。我使用 ajax 进行发布,并在 ajax 中设置 contentType:'' 和 datatype:''。我更改了牵引参数并修复了错误,谢谢大家...
    • 是的,这将是一个问题。如果您使用 Ajax,请查看 Phil Haack 的这篇文章:haacked.com/archive/2011/10/10/preventing-csrf-with-ajax.aspx
    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多