我的代码适用于GET方法。但是在POST的情况下,该操作似乎没有调用
我已经在SQL Server中尝试过此asp.net MVC
insertItem: function (item) {
console.log("items",item);
var d = $j.Deferred();
$j.ajax({
type: "POST",
//data: {},
//data: { Email: item.Email, FirstName: item.FirstName },
data: item,
url: '@Url.Action("Create", "User")',
//contentType: 'application/json; charset=utf-8',
//dataType: "json",
}).done(function (response) {
console.log("response", response.response)
d.resolve(response.response);
});
return d.promise();
}
如果我将类型指定为GET,则相同的代码可在控制器中使用GET方法正常运行,但POST方法无效
这是我的控制人
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(UserViewModel item)
{
}
POST方法不会调用
答案 0 :(得分:1)
您的jQuery代码看起来不完整,因为您的.NET代码具有防伪请求验证,但是您没有在发布请求中发送伪造令牌。
如果您使用某种形式,则可以通过此方法@Html.AntiForgeryToken()
并添加另一行代码以将防伪令牌发布到jQuery发布请求中。
insertItem: function (item) {
console.log("items",item);
var d = $j.Deferred();
var token = $('input[name="__RequestVerificationToken"]').val();
$j.ajax({
type: "POST",
//data: {},
//data: { Email: item.Email, FirstName: item.FirstName },
data: {
item:item,
__RequestVerificationToken: token,
},
url: '@Url.Action("Create", "User")',
//contentType: 'application/json; charset=utf-8',
//dataType: "json",
}).done(function (response) {
console.log("response", response.response)
d.resolve(response.response);
});
return d.promise();
}
如果您只是想测试一下它是否是由于防伪令牌引起的,那么只需从.Net控制器中删除这一行代码(您的代码)即可。
[HttpPost]
[ValidateAntiForgeryToken]
您可以通过在控制器上附加调试器来进行调试,您将能够看到由于防伪令牌导致的错误。