Отправка в Asp.Net Core получает нулевой объект - PullRequest
1 голос
/ 21 мая 2019

Я делаю POST-запрос от моего приложения Angular 7 к внутреннему серверу AspNet Core. Однако, при получении модели, это ноль.

Я тестирую с помощью Postman, и он работает при использовании Postman. Но он не работает при отправке из клиентского приложения.

Вот мой контроллер и база контроллера:

public class BaseController : ControllerBase {
    public readonly ILogger _logger;
}
[Route("api/[controller]")]
public class ExperienceController : BaseController {
    [HttpPost, Route("Create")]
    public async Task<IActionResult> Create([FromBody] Experience experience){
      // code ommited
    }
}

Вот мой код service.ts

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
// some code omitted

saveExperience(experience: Experience): Observable<Experience> {
  let url = `${this.baseUrl}/Experience/Create`;
  return this.http.post<Experience>(url, experience, httpOptions).pipe(
    tap((newExp: Experience) => this.log(`Created experience ${newExp}`)),
    catchError(this.handleError<Experience>('saveExperience'))
  );
}

Client Request

Объект, отправляемый из моего клиентского приложения, использует свойства case-case, а модель для бэкэнда использует pascal-case. В Почтальоне это ни на что не влияет, но на всякий случай. Postman request

Я действительно не понимаю, почему при звонке из Почтальона это работает. Но каждый тест от клиента, я получаю нулевой объект.

РЕДАКТИРОВАТЬ # 1 Я удалил все поля из своего класса Experience и использовал только имя и описание, и это сработало, я только что обнаружил, что получаю эту проблему, если у меня есть сложное свойство. Я добавил конструктор по умолчанию, инициализируя свойство, но все еще получая ту же проблему. Обратите внимание, что эта проблема возникает только при использовании приложения Angular. Если я использую Postman, оно работает

public class Experience : ExperienceBase {
    public string Name { get; set; }
    public string Description { get; set; }

    // this guy here is causing the issue
    public LocationDetails LocationDetails { get; set; } 

}

Заранее спасибо

1 Ответ

0 голосов
/ 22 мая 2019

Во-первых, вам не нужно устанавливать HttpHeader на application/json, поэтому вы удаляете HttpHeader, чтобы ваш код был таким:

saveExperience(experience: Experience): Observable<Experience> {
  let url = `${this.baseUrl}/Experience/Create`;
  return this.http.post<Experience>(url, experience).pipe(
    tap((newExp: Experience) => this.log(`Created experience ${newExp}`)),
    catchError(this.handleError<Experience>('saveExperience'))
  );
}

Пожалуйста, дайте мне знать, если у вас все еще есть проблемы

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