【发布时间】:2014-05-29 11:36:46
【问题描述】:
我正在尝试将项目从 .NET 4 和 MVC4 升级到 .NET 4.5 和 MVC5。除了我的 jQuery.post() 方法之外,我已经设法让一切正常。
我创建了一个简单的测试 API 控制器:
public class HomeApiController : ApiController
{
[HttpPost]
public string Test(TestObject test)
{
return test.name + "asdf";
}
public class TestObject
{
public string name;
}
}
我正在尝试使以下 $.post() 工作。这正是我在 MVC4 中所做的,并且效果很好。
var data = { name: 'owen' };
$.post('/api/HomeApi/Test/', data)
.done(function (result) {
console.log(result);
});
但名称总是以 null 出现,结果我只得到“asdf”。我也试过 JSON.stringify(data)。
但是,如果我像这样使用 $.ajax(),它可以正常工作,结果是“owenasdf”。
var data = { name: 'owen' };
$.ajax({
url: "/api/HomeApi/Test/",
type: "POST",
data: JSON.stringify(data),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
console.log(result);
},
error: function () {
alert("An error has occured!!!");
}
});
我花了半天时间在 google 上查找,我只能找到 $.ajax() 的示例,我真的不想检查所有旧代码并更改 $.post()到 $.ajax()。 $.post() 简单多了!
谁能告诉我为什么 $.post() 不再工作?
更新
当我检查提琴手的帖子时,这些是不同的:
POST(使用 JSON.stringify() 并且不使用,结果相同)
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
AJAX
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json; charset=utf-8
【问题讨论】:
-
$.post()是否发送正确的content-type标头?你能用 Fiddler 检查帖子吗? -
在你字符串化的ajax中......帖子没有
-
@DavidG 我已经用提琴手结果更新了我的问题。
-
@tymeJV 我尝试过使用 stringify 和不使用(如问题中所述)。而且我从未在 MVC4 中使用过 JSON.stringify()。
-
但是内容类型被发送为
application/x-www-form-urlencoded而不是JSON。
标签: c# jquery ajax asp.net-mvc asp.net-mvc-5