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

时间:2015-08-26 06:06:42

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

我们正在尝试在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-抛出以下错误

  
    

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

  

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

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

1 个答案:

答案 0 :(得分:1)

Application_Start方法中添加此行:

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;

more info