【问题标题】:415 (Unsupported Media Type) Angular API call415(不支持的媒体类型)Angular API 调用
【发布时间】:2019-10-22 21:57:03
【问题描述】:

我在尝试调用 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 的其他功能方面取得了成功,但尽管我回到代码中,但我没有看到任何差异。之前的问题建议添加 Content-Type HTTP 标头,如我在第一个 Angular 部分中所述,但错误仍然存​​在。

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

最后的信息。 Postman 显示所有功能。这是一个我无法解决的角度问题。

【问题讨论】:

  • 你的 API 支持 JSON 吗?
  • @jess 是的。

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


【解决方案1】:

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

Content-Type HTTP 标头通知服务器有关请求的正文。在 HTTP GET 的情况下,你没有正文!

更多信息请访问MDN

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2020-01-17
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多