415(不受支持的媒体类型)Angular API调用

时间:2019-10-21 06:55:44

标签: c# angular asp.net-web-api

我在尝试调用API GET调用时收到不受支持的媒体类型错误。

这是后端代码:

    public async Task<JObject> GetSummonerData(GetSummonerDataDto getMatch)
    {
        string username = getMatch.Username;
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        string url="https://na1.api.riotgames.com/lol/summoner/v4/summoners/by-name/" +username;
        client.DefaultRequestHeaders.Add("X-Riot-Token", _riotToken);
        HttpResponseMessage response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode();
        var body = await response.Content.ReadAsStringAsync();
        JObject json = JObject.Parse(body);
        return json;
    }

这里是Angular部分:

  GetSummonerData(model: any) {
      console.log(model);
      let headers = new HttpHeaders();
      headers = headers.set('Content-Type', 'application/json; charset=utf-8');
      return this.http.get(this.baseUrl + 'getsummonerdata', model);
  }

现在,当我拨打此特定电话时,我立即收到HTTP 415错误。但是,我还有另一个GET函数,该函数本质上是多次调用GetSummonerData后端并且正在工作

  getSummonerDataMultiple() {
       return this.http.get(this.baseUrl + 'getsummonerdatamultiple');

以下是上述Angular代码的后端代码:

    public async Task<JArray> GetSummonerDataMultiple()
    {
        string[] players = {"twokdavey", "jimlan", "captainwalrus69", "pynkcoffee"};
        JArray SummonersData= new JArray();
        foreach(var player in players)
        {
            var user = await GetSummonerData(new GetSummonerDataDto{Username = player});
            if(user != null){
                SummonersData.Add(user);
            }
        }
        return SummonersData;        
    }

请注意,唯一的区别是我没有DTO(无参数)。 GetSummonerDataDto只是一个简单的类,具有

public string Username {get; set;}

,我甚至将我的Angular部分的参数硬编码为{'username': 'tankthebeast'}。我已经成功地完成了涉及DTO的其他功能,但是就我回到代码而言,我没有发现任何差异。对此之前的问题建议按照我的第一个Angular部分所述添加Content-Type HTTP标头,但错误仍然存​​在。

我遇到的最大问题是我的标题在浏览器中显示application/problem+jso n,我找不到更多信息。

最后一条信息。 邮递员显示所有功能。这是我自己无法解决的一个尖锐问题。

1 个答案:

答案 0 :(得分:0)

经验法则:使用HTTP GET时不要发送Content-Type HTTP标头

Content-Type HTTP标头将请求的主体通知服务器。如果使用HTTP GET,则没有任何内容!

更多信息,请访问MDN