Угловой HttpClient делает GET-запрос с JSON в теле - PullRequest
0 голосов
/ 15 марта 2019

Я работаю над клиентским приложением Angular и бэкэндом ASP.NET Core Web API и сталкиваюсь с проблемой, пытаясь получить вызов от Angular, который, кажется, отлично работает от Postman.

машинописный код:

 exportScript(commands: ScriptCommand[]) {
    this.http.post(this.baseUrl + 'api/ScriptCommands/GenerateScript', JSON.stringify(this.scriptCommands)).subscribe();
  }

C # API call:

    [HttpGet]
    [Route("api/ScriptCommands/GenerateScript")]
    public IActionResult GenerateScript([FromBody]List<ScriptCommandViewModel> commands)
    {
        var mappedCommands = MapCommands(commands);
        var stream = ProcessCommands(mappedCommands);
        return File(stream, "application/xml", "generatedScript.xml");
    }

Когда я использую вызов Angular, я получаю обратно 400 Bad Request, но если я скопирую строковый JSON-скрипт scriptCommand в тело запроса Postman, он работает просто отлично.

Спасибо за помощь, всем!

ОБНОВЛЕНИЕ: Изменен код Typescript - я все еще получаю ответ HTTP 400 Bad Request, но моя вкладка «Сеть» в Chrome показывает это в заголовках запроса. Является ли тип содержимого «text / plain» проблемой?

Accept: application/json, text/plain, */*
Content-Type: text/plain
Origin: http://localhost:4200
Referer: http://localhost:4200/createScript
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Ну, я думаю, что вы столкнулись с этим

Метод get - это просто сокращение для http.request ('GET'). Теперь, если вам действительно нужно отправить тело JSON, вам придется использовать другой тип запроса - например, post или put

0 голосов
/ 15 марта 2019

Я думаю, что .append работает немного иначе, как мы думаем. Append возвращает добавленный HttpParams. Попробуйте это:

 exportScript(commands: ScriptCommand[]) {
    let httpParams = new HttpParams();
    httpParams  = httpParams.append("commands", JSON.stringify(this.scriptCommands));
    this.http.get(this.baseUrl + 'api/ScriptCommands/GenerateScript', { params: httpParams }).subscribe();
  }
...