Ajax POST 请求未命中控制器方法
Ajax POST Request not hitting the Controller method
我的代码适用于 GET 方法。但是在 POST 的情况下,该操作似乎没有调用
我已经用 SQL 服务器试过这个 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 方法未调用
您的 jQuery 代码看起来不完整,因为您的 .NET 代码正在进行防伪请求验证,但您没有在 post 请求中发送伪造令牌。
如果您使用某种形式,则可以通过此方法添加伪造令牌@Html.AntiForgeryToken()
并且通过向 post 添加另一行代码到 jQuery post 请求中的防伪令牌。
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]
您可以通过在控制器上附加调试器进行调试,您将能够看到由于防伪令牌导致的错误。
我的代码适用于 GET 方法。但是在 POST 的情况下,该操作似乎没有调用
我已经用 SQL 服务器试过这个 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 方法未调用
您的 jQuery 代码看起来不完整,因为您的 .NET 代码正在进行防伪请求验证,但您没有在 post 请求中发送伪造令牌。
如果您使用某种形式,则可以通过此方法添加伪造令牌@Html.AntiForgeryToken()
并且通过向 post 添加另一行代码到 jQuery post 请求中的防伪令牌。
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]
您可以通过在控制器上附加调试器进行调试,您将能够看到由于防伪令牌导致的错误。