为什么我的防伪令牌上有“禁用”属性?

时间:2012-05-02 07:33:11

标签: asp.net asp.net-mvc csrf

我在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)

我无法在谷歌上找到任何禁用的内容:/(

1 个答案:

答案 0 :(得分: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添加此属性