2017-03-27 59 views
0

我在我的asp.net 4.5网页表单应用程序中使用了这种防伪技术。AntiForgery Asp.net网络表单

<form id="form1" runat="server" class="formCont" method="post"> 
    <%= System.Web.Helpers.AntiForgery.GetHtml() %> 

使用命名空间

using System.Web.Helpers; 

,并在页面加载

AntiForgery.Validate(); 

它的正常工作。
现在我创建了可能asp generic handler来自javascript的ajax调用。现在的问题是我如何验证我的通用处理程序中的相同。

我在Ajax调用尝试这种

data: { "__RequestVerificationToken": $("input[name=__RequestVerificationToken]").val() }, 

,并在处理程序尝试这种AntiForgery.Validate();但我得到异常

An exception of type 'System.Web.Mvc.HttpAntiForgeryException' occurred in System.Web.WebPages.dll but was not handled in user code 

Additional information: The required anti-forgery form field "__RequestVerificationToken" is not present. 

我在检查,我在context.Request["__RequestVerificationToken"]得到的值

我怎么能过来这个问题。

+0

你用什么格式发布数据? JSON? '应用程序/ x-WWW的形式urlencoded'? – mason

+0

@mason它的默认值我没有指定任何。 –

+0

然后使用浏览器的网络工具查看AJAX请求。比较一下,正常的职位看起来像。指出不同。 – mason

回答

0

我得到了解决

有人在寻找context.Request.Forms收集所以我做一个小的变化如下

  1. 更改请求类型后type: "POST",

和宾果游戏,它的工作。