我在web api asp.net核心应用程序上有以下方法
Api post方法:
// POST api/values
[HttpPost]
public string Post([FromBody] List<ValuesToPost> values)
{
return values.Count.ToString();
}
与Postman合作:POST JSON(应用/ JSON) 身体 - &gt; raw:
[{
Value: "asd",
Column:2,
Row:1,
IsPostBack: true
},
{
Value: "assddfs",
Column:2,
Row:1,
IsPostBack: true
}]
在我的Angular应用上:
的ComponentOne
sendDataToTheServerByPost(arrayOfObjects: any) {
this.dataService.postData(arrayOfObjects).subscribe(event => {
console.log("post");
});
}
DataService.ts
public postData(body: any): Observable<any> {
let bodyToSend = JSON.stringify(body);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
return this.http.post(this.DataUrl, bodyToSend, { headers: headers }).map((response: Response) => {
return response.json().data;
}).catch(this.handleError);
}
我在Chrome控制台上收到以下错误:
Error
zone.js:2622 OPTIONS http://localhost:8080/api/values 415 (Unsupported Media Type)
我错过了什么,在Postman中,对API post方法的调用有效,但不是来自角度app。全部在同一台Dev计算机上运行。 CORS问题我不这么认为,因为Get Method工作正常。还是我错了?建议吗?
答案 0 :(得分:0)
<强>解决强>
最后,Angular没有任何问题。这是一个CORS问题。显然,有不同的处理方法,我在web.config上做旧版本的Web API。经过调查和测试,我在Rick Strahl的网络日志中找到了一个解释清楚的方法here。关于Post的第一条评论引用了GitHub repo,它有一个配置良好的带有Angular的ASpNetCore应用程序。如果其他人有相同的问题
答案 1 :(得分:0)
我发布了以下对象的相同问题
let song = {
title : this.title.value,
url: this.url.value,
artist: this.artist.value
};
this.service.create(song)
.subscribe(response => console.log(response));
我通过显式地将对象的每个元素类型化为:
来实现它let song = {
title : this.title.value as string,
url: this.url.value as string,
artist: this.artist.value as string
};
this.service.create(song)
.subscribe(response => console.log(response));