2013-04-03 107 views
0

我在Mvc项目中有一个带有AntiforgeryToken()值的窗体。当提交表格时,它将与MvC项目中的相应控制器进行验证后行动ValidateAntiforgeryToken如何通过Ajax post防止跨站点请求伪造?

到确认页面。在具有隐藏表单的两个按钮的确认中,这将会与前面的上述相同的Post操作进行。我在这两个隐藏表单中添加了Html.Antiforgerytoken()。点击按钮时,我们不需要Form Post [页面重新加载],而不需要使用Ajax post。

我已经尝试过使用Ajax帖子(使用Antiforgerytoken),但它不会触发发布操作。显示404错误。

您能否请建议如何启用AntiforgryToken使用Ajax post?为此,什么类型的代码句柄和它添加在哪里?

表的细节:

<form method="post" action=""> 
    @Html.AntiForgeryToken() 
    <input type="hidden" name="Name" value="@downloadInfo.Name" /> 
    <input type="hidden" name="Company" value="@downloadInfo.Company" /> 
    <input type="hidden" name="Email" value="@downloadInfo.Email" /> 
    <input type="hidden" name="Phone" value="@downloadInfo.Phone" /> 
</form> 

阿贾克斯帖子:

$.ajax({  
    url: url, 
    type: 'POST', 
    data: JSON.stringify(Formdatas), 
    contentType: 'application/json; charset=utf-8', 
    beforeSend: showLoadingGraphic(id), 
    success: onSuccessfulPost 
}); 
+0

http://stackoverflow.com/a/4074289/1551730 –

回答

0

尝试产生,因为它应该(使用Html.BeginForm助手)的形式:

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" })) 
{ 
    @Html.AntiForgeryToken() 
    <input type="hidden" name="Name" value="@downloadInfo.Name" /> 
    <input type="hidden" name="Company" value="@downloadInfo.Company" /> 
    <input type="hidden" name="Email" value="@downloadInfo.Email" /> 
    <input type="hidden" name="Phone" value="@downloadInfo.Phone" /> 
} 

然后:

var myForm = $('#myForm'); 
$.ajax({  
    url: myForm.attr('action'), 
    type: myForm.attr('method'), 
    data: myForm.serialize(), 
    beforeSend: showLoadingGraphic(id), 
    success: onSuccessfulPost 
}); 

现在防伪令牌和隐藏字段将被正确发送到服务器。

+0

嗨季米特洛夫,它完美地工作。但你可以解释删除Contentype的原因:Json和Data:Json.stringfy(myformdata.serialize()) – Anandh

+0

['.serialize()'](http://api.jquery.com/serialize/)方法需要所有形式的输入字段并将它们格式化为'application/x-www-form-urlencoded'请求,这是在没有AJAX的情况下提交表单时默认的。所以你不需要将contentType设置为'JSON'。 –

+0

嗨季米特洛夫,希望你的帮助。你能解释什么是在CSRF预防转换javascript对象到Json符号[json.stringfy]时的退步。 – Anandh

1

如果您收到的404不是来自令牌,那么您的网址或方法无效。 您正在将您的令牌包含在您的ajax表单文章中,因此请使用工具Fiddler查看正在请求的URL并首先进行修复。

我猜使用“网址”你的Ajax调用是不正确

相关问题