我有一个.NET API,如下所示
myApp.service("lastday_data", function($http) {
this.getData = function() {
return $http({
method: 'GET',
url: 'http://localhost/task/index.php/v1/example/users'
}).then(function(response) {
if (response.status)
return response.data;
else
return $q.reject('Problem retrieving data');
}, function(error) {
return $q.reject(error);
});
}
});
我正在尝试从有角度的应用程序访问API。 GET请求工作正常,但是当我尝试发送POST请求时,它没有正文,并且API接收到空参数。
我已经通过提琴手访问该API进行了检查,并且工作正常。 我也启用了
用于api。 标题也被正确添加,我通过Chrome开发工具进行了检查。我在这里想念什么吗?
我的角度应用程序组件的TS文件如下:
public List<long> Compare ([fromBody] String NumberOfDatasets)
答案 0 :(得分:2)
使用application/json
的内容类型时,将字符串作为正文发布是不可接受的,因为
json将尝试从对象{}
或数组[]
进行解析。
要将单个字符串作为请求正文发送,请将内容类型更改为application/x-www-form-urlencoded
,并在字符串前面添加等号(=
)
尝试一下
myFunction()
{
let httpHeaders = new HttpHeaders({
'Content-Type' : 'application/x-www-form-urlencoded'
});
let options = {
headers: httpHeaders
};
return this.httpClient.post(myUrl, "=5", options);
}
答案 1 :(得分:1)
"5"
不是有效的JSON,因此MVC无法反序列化它并返回null。
将字符串作为JSON传递的正确方法是将其封装在引号中
"\"5\"" //that's the way you should write it in JS
或使用
JSON.stringify("5")
这将为您提供您想要的任何对象的正确JSON字符串。
此外,传递{ NumberOfDatasets: "5" }
无效,因为正确的反序列化对象必须看起来像这样:
public class DatasetsNumber
{
public string NumberOfDatasets { get; set; }
}
显然不是一个字符串。