我在使用Ajax的AntiForgeryToken时遇到麻烦。我正在使用ASP.NET
MVC3。我在jQueryAjax调用和Html.AntiForgeryToken()中尝试了该解决方案。使用该解决方案,令牌现在可以通过:
var data = { ... } // with token, key is '__RequestVerificationToken'
$.ajax({
type: "POST",
data: data,
datatype: "json",
traditional: true,
contentType: "application/json; charset=utf-8",
url: myURL,
success: function (response) {
...
},
error: function (response) {
...
}
});
当我删除该[ValidateAntiForgeryToken]
属性只是为了查看数据(带有令牌)是否作为参数传递给控制器时,我可以看到它们正在传递。但是由于某种原因,A required anti-forgery token was not supplied or was invalid.
当我放回属性时,消息仍然弹出。
有任何想法吗?
编辑
antiforgerytoken是在表单内部生成的,但是我没有使用Submit动作来提交它。相反,我只是使用jquery获取令牌的值,然后尝试用ajax发布该值。
这是包含令牌的表单,位于顶部母版页上:
<form id="__AjaxAntiForgeryForm" action="#" method="post">
@Html.AntiForgeryToken()
</form>
您错误地指定contentType
到application/json
。
这是一个可能如何工作的示例。
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(string someValue)
{
return Json(new { someValue = someValue });
}
}
视图:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "__AjaxAntiForgeryForm" }))
{
@Html.AntiForgeryToken()
}
<div id="myDiv" data-url="@Url.Action("Index", "Home")">
Click me to send an AJAX request to a controller action
decorated with the [ValidateAntiForgeryToken] attribute
</div>
<script type="text/javascript">
$('#myDiv').submit(function () {
var form = $('#__AjaxAntiForgeryForm');
var token = $('input[name="__RequestVerificationToken"]', form).val();
$.ajax({
url: $(this).data('url'),
type: 'POST',
data: {
__RequestVerificationToken: token,
someValue: 'some value'
},
success: function (result) {
alert(result.someValue);
}
});
return false;
});
</script>
antiforgerytoken是在表单内生成的,但我没有使用提交操作来提交它。相反,我只是使用jquery获取令牌的值,然后尝试用ajax发布该值。 下面是包含令牌的表单,位于顶部母版页:
问题内容: 我有以下代码: 我想在不使用JavaScript的情况下将验证令牌添加到链接中,这似乎是多余的依赖项,因为我已经在服务器中拥有该值。有适当的方法吗? 问题答案: 从MSDN文档(我的重点) HtmlHelper.AntiForgeryToken方法 生成一个隐藏的表单字段(防伪令牌),该表单字段在提交 表单 时经过验证。 您需要一个form元素来生成防伪令牌。
我在时区面临一个问题。现在我正在从客户端保存时区,并将所有日期时间存储在UTC中。它工作正常,但当我试图将UTC的日期时间转换为CST、EST、EDT等时区后,它会显示错误的数据。 问题-假设我在美国东部夏令时晚上10点做了任何任务,并且它将在凌晨2点(按照UTC)保存在DB中,但当我尝试获取一天的数据并通过当前UTC日期时。 我的问题是,如果我试图获取一天的数据,比如从美国东部时间午夜11点到当
问题内容: 我在Internet Explorer中的页面出现问题。我有一个Ajax调用,在其他浏览器中,当我单击该链接时,该调用会传递到控制器中并正确加载数据。但是在IE中,一次加载后,它消失了,而我却没有通过控制器就获得了相同的旧结果。 问题答案: 尝试: 放置在控制器类中的此属性禁用缓存。由于不需要在应用程序中缓存,因此将其放置在BaseController类中: 这是有关OutputCac
我有一个结构如下的maven项目: 我希望maven jar插件在构建jar文件时打包到数据库文件夹中。我尝试过包含这里概述的内容:https://maven.apache.org/plugins/maven-jar-plugin/examples/include-exclude.html,但它找不到目录“../database”(或../../database或../../../database
问题内容: 我正在为JEE5 Web服务编写单元测试。Web服务的行为取决于文件中设置的属性。因此,我想将我分成一个恒定的部分和一个在两次测试之间更改的部分。 为了查看是否确实可行,我尝试查看是否可以拆分该属性。根据一些说明,我发现了以下几点: web.xml fragment.xml 但是,我在文件上收到验证错误: 必须为元素类型“ web-app”声明属性“ version”。[7] 必须为元