#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, если у вас нет никакой необходимости.