Angular Http Post无法正常工作。错误:不支持的媒体类型

时间:2017-09-07 00:49:29

标签: angular http post asp.net-core asp.net-web-api2

我在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工作正常。还是我错了?建议吗?

2 个答案:

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