Параметры запроса Angular 7 HttpClient put, отправляющие нулевые значения в конечную точку

#angular #asp.net-web-api #asp.net-core #angular-httpclient

#angular #asp.net-web-api #asp.net-core #angular-httpclient

Вопрос:

У меня есть служба Angular с этим методом запроса ввода:

 put(peopleFieldID: number, peopleFieldName: string): Observable<number> {
let params = new HttpParams();
params = params.append("peopleFieldID", peopleFieldID.toString());
params = params.append("peopleFieldName", peopleFieldName);

return this.http
  .put<number>(this.url, { params: params })
  .pipe(catchError(this._errorHandling.handleError.bind(this)));}
  

Приведенное выше относится к этой конечной точке в моем .net core API:

     [Authorize(Roles = "Client")]
    [Route("")]
    [HttpPut]
    public IActionResult C_Update(int peopleFieldID, string peopleFieldName )
    {
        //Make call to the proper repo method.
        return Json(_peopleFieldRepo.C_Update(peopleFieldID, peopleFieldName));
    }
  

Два параметра, peopleFieldID и peopleFieldName, всегда равны 0 и null. Я точно определил, что интерфейс Angular отправляет параметры правильно, но серверная часть не может их распознать. У меня есть много других конечных точек, где это работает просто отлично.

Ответ №1:

Вам нужно задать параметры запроса с помощью HttpParams и передать null для полезной нагрузки, если у вас их нет:

 const params = new HttpParams()
            .set('peopleFieldID', peopleFieldID.toString())
            .set('peopleFieldName', peopleFieldName);
// if you have a payload to pass you can do that in place of null below
return this.http
  .put<number>(this.url, null, { params: params })
  .pipe(catchError(this._errorHandling.handleError.bind(this)));}
  

Комментарии:

1. Это действительно решило проблему. Я подумал, что, поскольку параметр body был необязательным, не имело бы значения, если бы я его не включил. Я не включаю это в запросы Get, но имеет смысл, зачем мне это нужно в Post / Puts. Спасибо!

2. Да, вам не нужно тело для Get, но оно нужно для Put и POST , поэтому отправьте null, если у вас нет никакой необходимости.