首页 文章

@ Html.antiforgerytoken()工作正常是VS 2013但在VS 2012中抛出错误

提问于
浏览
1

我们正在尝试在MVC4中的控制器中的一个操作方法中阻止跨站点请求伪造攻击 . 下面是我们所做的代码更改,它在VS 2013中运行正常但在VS 2012中引发错误,并且在Windows Server 2012-IIS 8中部署时出现的错误也是如此 .

View.cshtml

@using(Html.Beginform())
  {@Html.antiforgerytoken()}

Controller.cs

[ValidateAntiforgeryToken]
public ActionResult actionmethod1()
{
  <some code here>
}

VS2013-以上代码工作正常

VS2012-抛出以下错误

“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”或“http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”类型的声明未提供的ClaimsIdentity . 要使用基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsIdentity实例上提供这两个声明 . 如果配置的声明提供程序使用不同的声明类型作为唯一标识符,则可以通过设置静态属性AntiForgeryConfig.UniqueClaimTypeIdentifier来配置它 .

当在Windows Server 2012 IIS8中部署使用VS2013的已发布代码时,我们会收到与上述相同的错误

  1. VS2013有什么区别让它起作用,这在VS2012中无效? 2.我们应该在IIS中做些什么改变才能使代码像在VS2013中一样工作?

1 回答

  • 1

    Application_Start 方法中添加以下行:

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
    

    more info .

相关问题