Как получить доступ к HttpParams в контроллере WebApi с помощью глагола [HttpPut] - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь обновить ресурс. Итак, я пытаюсь получить доступ к ресурсу, используя PUT в угловой службе.

RollBackBatchById(selectedBatchId: number) {
    const params = new HttpParams();
    params.append('resourceId', resourceId.toString());
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'multipart/form-data');
    headers.append('Accept', 'application/json');
    const httpOptions = { headers: headers };
    return this._httpClient.put(this.base_url + 'api/WebApi/UpdateResource', { params: params })
      .subscribe((res: Response) => {

      });
  }

В моем контроллере WebApi

[HttpPut]
[Route("UpdateResource")]
public TransactionResult UpdateResource([FromQuery]string resourceId)
{
    var id = resourceId;
}

Итак,когда я пытаюсь получить доступ к своему resourceId, он становится пустым. И когда я вижу в сети, я не могу найти добавляемый к URL resourceId.

Может кто-нибудь помочь мне с этим.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

По моему мнению, вы неправильно используете определение REST URL для метода PUT. URL должен быть: 'api / WebApi / UpdateResource / id'

Таким образом, контроллер C # должен быть:

[HttpPut]
[Route("UpdateResource/{resourceId:int}")]
public TransactionResult UpdateResource([FromUri]int resourceId)
{
    var id = resourceId;
}

Там я использовал int как тип данных "resourceId", здесь выесть все доступные типы: https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

Затем в угловом коде:

RollBackBatchById(selectedBatchId: number) {
    const params = new HttpParams();
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'multipart/form-data');
    headers.append('Accept', 'application/json');
    const httpOptions = { headers: headers };
    return this._httpClient.put(`${this.base_url}api/WebApi/UpdateResource/${selectedBatchId}`, null, { params: params })
      .subscribe((res: Response) => {

   });
} 

Попробуйте и скажите мне, работает ли он сейчас. Удачи.

0 голосов
/ 23 октября 2019

Получил ответ после некоторых исследований, связанных с HttpParams, что они неизменны и прочее.

Полезная ссылка при просмотре через HttpParams Угловая 4.3 - HttpClient set params

Разрешениеis

RollBackBatchById(selectedBatchId: number) {
    const params = new HttpParams().append('resourceId', resourceId.toString()); 
    //chaining the parameters
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'multipart/form-data');
    headers.append('Accept', 'application/json');
    const httpOptions = { headers: headers };
    return this._httpClient.put(this.base_url + 'api/WebApi/UpdateResource',null { params: params })
      .subscribe((res: Response) => {

      });
  } 
  1. PUT исключает тело в качестве второго параметра, который я не отправляю. Таким образом, значение NULL
  2. HttpParams является неизменным и, в свою очередь, возвращает новый экземпляр HttpParam, который всегда будет нулевым. Вот почему я переключился на цепочку.

Тогда мой URL получил конструкцию, изменившуюся на api/WebApi/UpdateResource?resourceId=XXX

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