415 (неподдерживаемый тип носителя) Угловой вызов API - PullRequest
0 голосов
/ 21 октября 2019

Я получаю ошибку неподдерживаемого типа носителя при попытке вызвать вызов 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;
    }

Вот угловая часть:

  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 back-end и РАБОТАЕТ

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

Вот код сервера для указанного выше углового кода:

    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;}

, и я даже жестко закодировал свой параметр, равный {'username': 'tankthebeast'} для моей угловой части. Я был успешным с другими функциями, которые задействовали DTO, но сколько бы я ни возвращался к коду, я не вижу различий. Предыдущие вопросы к этому предлагают добавить Content-Type HTTP-заголовок, как описано в моей первой угловой части, но ошибка состоит в том.

Самым большим бликом к моей проблеме является то, что мой заголовок отображает application/problem+jso n в браузерене могу найти больше информации.

Последняя часть информации. Почтальон отображает все функции. это угловая проблема, которую я не могу решить с моей стороны.

1 Ответ

0 голосов
/ 22 октября 2019

Основное правило: Не отправлять Content-Type HTTP-заголовок при использовании HTTP GET .

. Content-Type HTTP-заголовок информирует сервер о теле запроса. В случае HTTP GET у вас нет тела!

Больше информации на MDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...