0

我在 asp.net MVC 3 中有一个网站,我只是放了一些防伪令牌,但我不知道为什么,在我的一种形式(不是其他形式)中,我收到了这个异常:

A required anti-forgery token was not supplied or was invalid.

看来,在我的 html 代码中,我有以下标记:

    <input name="__RequestVerificationToken" 
type="hidden" value="0Ll0Io/fX0dR5HXCAroCKTKCBqNn2tmwgcqgYGjln8WVdWOPF2VQEen4wd2UKso1lpIstniXWjdgEE6m0ADgfRhIP25K12Y/ll+PFaYzoQgFAqSfL4XqNYKMrzvAKqmuqXnh3lwBFCYcDXKxRshKVefYelNfWgdFMtf8Ru/dT4qzWw9vU4KQS8eliglpzN9jXu5fekpBOsQGzOhoFHI3Ow==" 
disabled="disabled">

为什么我会得到这个禁用的属性?

这是我的一些代码:

@using (Html.BeginForm("XXX", "YYY", FormMethod.Post))
{
@Html.AntiForgeryToken()
...
}

和控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult XXX(SessionStore sessionStore, CurrentModel model)

我在谷歌上找不到任何禁用的东西:/(

4

1 回答 1

3

这是生成隐藏字段的代码:

public HtmlString GetHtml(HttpContextBase httpContext, string salt, string domain, string path)
{
    string str = this.GetAntiForgeryTokenAndSetCookie(httpContext, salt, domain, path);
    string antiForgeryTokenName = AntiForgeryData.GetAntiForgeryTokenName(null);
    TagBuilder builder = new TagBuilder("input");
    builder.Attributes["type"] = "hidden";
    builder.Attributes["name"] = antiForgeryTokenName;
    builder.Attributes["value"] = str;
    return new HtmlString(builder.ToString(TagRenderMode.SelfClosing));
}

如您所见,没有任何disabled属性的痕迹。

因此,您所描述的情况不会发生,除非:

  1. 您正在使用一些自定义构建的帮助程序或自定义构建的 ASP.NET MVC
  2. 您已使用 javascript 添加此属性
于 2012-05-02T07:38:55.580 回答