Как передать объектную модель (в которой есть массив моделей объектов) в API для вставки в качестве параметров - PullRequest
2 голосов
/ 19 февраля 2020

Я новичок в angular, пытаюсь задавать параметры моей объектной модели, всякий раз, когда я строю свой объект в строку, он создает большую строку, которую API не принимает. Что мне делать..?

вот объект, который я хочу преобразовать в параметры.

{
    "qaevaluationid": 1,
    "agentid": 1,
    "callerid": "1234",
    "calledon": "02/13/2020 10:38:14 AM",
    "duration": "304",
    "overallfeedback": "adasdasd",
    "isfatal": false,
    "fatalcallreasonid": "3",
    "evaluationtypeid": "1",
    "callratings": [{
        "callratingid": 1,
        "createdby": 1,
        "createdbyname": "john",
        "createdon": null,
        "evaluationfactorid": 8,
        "is_deleted": "F",
        "modifiedby": -1,
        "modifiedbyname": "",
        "modifiedon": null,
        "qaevaluationid": 1,
        "rating": "7"
    }, {
        "callratingid": 2,
        "createdby": 1,
        "createdbyname": "john",
        "createdon": null,
        "evaluationfactorid": 9,
        "is_deleted": "F",
        "modifiedby": -1,
        "modifiedbyname": "",
        "modifiedon": null,
        "qaevaluationid": 1,
        "rating": "6"
    }, {
        "callratingid": 3,
        "createdby": 1,
        "createdbyname": "john",
        "createdon": null,
        "evaluationfactorid": 10,
        "is_deleted": "F",
        "modifiedby": -1,
        "modifiedbyname": "",
        "modifiedon": null,
        "qaevaluationid": 1,
        "rating": "8"
    }],
    "createdby": 1,
    "createdbyname": "John",
    "createdon": null,
    "modifiedby": -1,
    "modifiedbyname": null,
    "modifiedon": null,
    "is_deleted": "F"
}

и в TypeScript я делаю так

this.httpOptions.params = new HttpParams();

this.httpOptions.params = this.httpOptions.params.set('qaEval', JSON.stringify(qaevaluation)); 

return this._httpClient.post<APIResponse<QAEvaluation>>(this.myAppUrl + 'QAEvaluation/insert', { qaEval: qaevaluation }, this.httpOptions)
      .pipe(retry(1), catchError(this.errorHandler));

получение этой ошибки

"Http-ответ об ошибке для https://localhost: 44304 / QAEvaluation / insert? QaEval =% 7B% 22qaevaluationid% 22 : -1,% 22agentid% 22: 1,% 22callerid% 22:% 22% двести двадцать один тысяча двести тридцать четыре,% 22calledon% 22:% 2202/13/2010-2020%: 38: 14% 20AM% 22% 22% 22duration:% 22304 % 22,% 22overallfeedback% 22:% 22adasdasd% 22,% 22isfatal% 22: false ……. Это продолжается и продолжается: 404 OK "

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Скорее всего, вам нужно прокси свои URL для вашего API. Angular использует указанный c порт для размещения в вашей среде разработки, в вашем случае 44304.

Проверка: https://angular.io/guide/build

Вы можете использовать поддержку прокси в dev-сервере webpack для перенаправления определенных URL-адресов на внутренний сервер, передав файл в опцию сборки --proxy-config. Например, чтобы перенаправить все вызовы для http://localhost: 4200 / api на сервер, работающий на http://localhost: 3000 / api , выполните следующие действия.

Создайте файл proxy.conf. json в папке src / вашего проекта.

Добавьте следующее содержимое в новый файл прокси:

{
  "/api": {
    "target": "http://localhost:3000",
    "secure": false
  }
}

In файл конфигурации CLI, angular. json, добавьте параметр proxyConfig к цели обслуживания:

"architect": {
  "serve": {
    "builder": "@angular-devkit/build-angular:dev-server",
    "options": {
      "browserTarget": "your-application-name:build",
      "proxyConfig": "src/proxy.conf.json"
    },

Выполнить по подаче

0 голосов
/ 19 февраля 2020

обновил мой контроллер, чтобы он принимал FormBody с динамическим c объектом, и удалил http-параметры из машинописного текста, например .. И это сработало.

return this._http.post<APIResponse<QAEvaluation>>(this.myAppUrl + 'QAEvaluation/insert', { qaEval: qaevaluation }, { headers: new HttpHeaders({ 'Content-Type': 'application/json; charset=utf-8' }) })
          .pipe(retry(1), catchError(this.errorHandler));

также использовал сериализацию для анализа моего результирующего объекта

    public ActionResult Insert([FromBody]dynamic qaEval)
            {            

                    var objModel1 = Newtonsoft.Json.JsonConvert.DeserializeObject(qaEval.ToString());

                    var objModel = Newtonsoft.Json.JsonConvert.SerializeObject(objModel1.qaEval);

    QAEvaluationModel model = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.QAEvaluationModel>(objModel);

qaEvaluationRepository.Add(model);

return Ok(new Models.APIResponse
                    {
                        HasError = false,
                        Message = "Success",
                        Content = null
                    });
    }
0 голосов
/ 19 февраля 2020

Вы находитесь на правильном пути, но вы добавляете все объекты json в качестве параметров запроса в URL вашего запроса. В POST-запросах вы хотите поместить свои данные в тело HTTP.

Я думаю, что если вы пропустите вторую строку, вам подходит go. Взгляните также на документацию HttpClient для примеров и правильного синтаксиса.

...