Angular + Asp Core 2 http Почтовые данные всегда нулевые - PullRequest
0 голосов
/ 04 июля 2018

Я долго борюсь с этой проблемой.

У меня есть клиентское приложение с Angular 6 и WebApi, созданное с помощью ASP Core 2.1.

Для моего запроса POST я делаю что-то вроде этого.

const params = {
  TestData: newActions,
  ExportAndExecute: true
};

this.httpClient.post('/tests/export', params, {headers: {}}).subscribe((result) => {
  console.log(result);
});

где метод httpClient.post:

post(route: string, params: any, headers: object) {
return new Observable<any>(subscriber => {
  this.httpClient.post<any>(this.baseUrl + route, params, headers).subscribe((result) => {
    subscriber.next(result);
  }, (error: Response) => {
    this.handleRequestError(error);
  });
});

}

Действие моего контроллера API выглядит следующим образом:

[HttpPost]
[Route("/api/[controller]/export")]
[Authorize(AuthenticationSchemes = "JwtBearer")]
public async Task<HttpStatusCode> ExportTest( [FromBody] ExportTestModel model)
{
    var result = HttpStatusCode.MisdirectedRequest; 
}

А модель класса:

public class ExportTestModel
{
    public List<BsonDocument> TestData { get; set; }
    public bool ExportAndExecute { get; set; }
}

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

Я могу добавить, что если я получаю данные как JObject, я могу видеть их правильно, но я не хочу делать это таким образом.

Я чувствую себя глупо, но, возможно, кто-то может указать мне, что я делаю неправильно в моем подходе.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Это работает для меня, используя Angular 6 HttpClient и Asp.Net Core 2.0 или 2.1

В вашем контроллере:

const params = {
  TestData: newActions,
  ExportAndExecute: true
};

this.dataService.postData(params).subscribe( 
    data => {
       console.log('post OK !');
    },
    error => {
       console.log('post error !');
    }
);

К вашим услугам:

  constructor( private http: HttpClient ) {}

  const headers = new HttpHeaders()
     .set('Content-Type', 'application/json')
     .set('Accept', 'application/json')

  const url = 'http://localhost:5000/api/'  

  postData( params ) {
     return this.http.post(
        url + 'grupos',
        JSON.stringify(params),
        { headers: headers }
     );        
  }
0 голосов
/ 04 июля 2018

Глядя на ваш пример кода, мой разум переключается на два варианта:

  1. Неправильные заголовки. Поскольку вы явно устанавливаете пустой объект заголовков в качестве третьего параметра, возможно, из-за этого Angular не добавляет HTTP-заголовок по умолчанию для типа контента, через который вы отправляете (application / json). Если вы не сообщаете ASP.NET Core, какие данные отправляете, то ASP.NET Core не заботится об этом и не применяет привязку модели. Исправить это очень просто, просто удалите третий параметр в вашем вызове this.httpClient.post().

    this.httpClient.post('/tests/export', params).subscribe(result => {
      console.log(result);
    });
    

    Вы можете проверить, установлен ли этот заголовок, проверив сетевой трафик на панели инструментов веб-разработчика.

  2. Чувствительность к регистру. В JavaScript (и, следовательно, в JSON) верблюжья оболочка является стандартом. Ваш params объект имеет TestData и ExportAndExecute, оба в паскалях. Возможно, связующее для модели чувствительно к регистру.

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