当我尝试使用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" });
}
答案 0 :(得分:0)
需要进行一些更改才能完成这项工作
<强> 1。内容类型强>
您使用的是“application / 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" });
}
答案 1 :(得分:0)
我找到了自己问题的答案。
即使我在同一台PC上调用(但使用jQuery Ajax),我还需要添加:
[AllowAnonymous] // To the controller
和
appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); // To the HttpConfiguration before any routes