当我尝试使用jquery ajax调用WebAPI时,下面代码返回NetworkError
的原因吗?Web方法被成功地调用,但在返回后发出错误。
如果更改对httpget的访问,我可以使用IE访问Web方法。
因此,jQuery Ajax一定有问题。希望有人会有所帮助。
$.ajax({
type: "POST",
async: false,
url: "http://localhost:5000/API/Test",
xhrFields: { withCredentials: true },
data: JSON.stringify(Params),
contentType: "application/x-www-form-urlencoded",
success: function (msg) {
},
error: function (XHR, errStatus, errorThrown) {
});
[Route("API/Test"), HttpPost]
public string Test()
{
JsonConvert.SerializeObject(new { Test = "Test Message" });
}
需要一些更改才能使此工作
1。content-type
您正在使用"应用程序/x-www-form-urlencoded" 的内容类型,但将数据发送为JSON字符串。将内容类型更改为" application/json" 。默认情况下,API将从JSON的请求主体中启用。
2。API签名中没有输入
test()不会从请求正文中读取任何内容。添加一个与客户端发送的对象匹配的参数。
3。没有返回
API方法不会返回字符串作为签名承诺。
最终结果
$.ajax({
type: "POST",
async: false,
url: "http://localhost:5000/API/Test",
xhrFields: { withCredentials: true },
data: JSON.stringify(Params),
contentType: "application/json",
success: function (msg) {
console.log(msg);
},
error: function (XHR, errStatus, errorThrown) {
console.log(errStatus);
});
[Route("API/Test"), HttpPost]
public string Test(RequestBodyDTO body)
{
return JsonConvert.SerializeObject(new { Test = "Test Message" });
}
我找到了自己问题的答案。
即使我是从同一PC打电话(但使用jQuery ajax),我也需要添加:
[AllowAnonymous] // To the controller
和
appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); // To the HttpConfiguration before any routes