OWIN WebAPI 2 jQuery Ajax获得NetworkError

时间:2017-08-29 11:46:34

标签: jquery ajax owin webapi2

当我尝试使用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" });
}

2 个答案:

答案 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