我正在从Aurelia JS调用Web API控制器,但我没有从Web API控制器那里得到任何响应。
这是我的代码:
httpClient.fetch('/api/controllername', {
method: "POST",
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(passvaluetocontroller)
})
.then(response => response.json())
.then(data => {
alert(data);
alert("success");
});
这是我的控制器代码:
public HttpResponseMessage Post(passvaluetocontroller s)
{
return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
}
所以我没有得到任何响应,并且它在控制台中显示错误:
Uncaught
(承诺)
SyntaxError:
JSON输入的意外结束。
请求成功后如何工作?
答案 0 :(得分:3)
原因很简单。您实际上并没有从控制器方法发送任何内容:
public HttpResponseMessage Post(passvaluetocontroller s)
{
return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
}
通过HttpResponseMessage
方法System.Net.HttpStatusCode.Accepted
传递,您正在创建一个响应,其标题包含Accepted
状态代码,但其正文为空。因此,没有什么可以反序列化。如果响应为空,response.json()
将失败,这就是您收到错误的原因。
有两种可能的解决方案:
response.json()
,因为您不需要任何内容。在这种情况下,在.then(...)
方法中,只需检查response.ok
即可。执行此操作将告诉您响应是否表示成功操作 - 即响应状态代码为2xx
。public object Post(passvaluetocontroller s)
{
return new { Test = "Test" };
}
显然,您可以将object
返回类型更改为您想要的任何内容,因此您可以在操作方法中返回您喜欢的对象。