Параметр Angular, передаваемый моему контроллеру, всегда имеет значение false

Не уверен, что у меня правильная маршрутизация или синтаксис, так как я немного новичок в маршрутизации Angular. Но параметр isPartial всегда имеет значение false.

Вот мой код в Angular/Typescript, где я вызываю свой контроллер веб-сервиса. Я передаю идентификатор и логическое значение «isPartial», идентификатор подходит, но isPartial всегда ложен

// .ts file
this.webService.add(this.claim.id, true)
  .subscribe(result => {
    // do some stuff
  }, error => {
    // take care of error
  });

// web service 
add(id: number, isPartial: boolean): Observable <any> {
  return this.http.post(this.baseUrl + 'webservice/add/' + id, isPartial);
}

// my route
{
  path: 'claim/:id',
  component: ClaimComponent,
  resolve: {
    claim: ClaimResolver
  },
  canDeactivate: [PreventUnsavedChanges]
},

вот мой контроллер

[Route("api/[controller]")]
[ApiController]
public class WebServiceController : ControllerBase
{
    [HttpPost("add/{id}")]
    public async Task<IActionResult> Add(int id, bool isPartial) 
    {
       // isPartial is always false
    }
}

person user1186050    schedule 12.01.2020    source источник
comment
откуда вы вызываете метод add? можете ли вы опубликовать код, откуда служба вызывает метод add?   -  person Plochie    schedule 12.01.2020


Ответы (2)


Я настроил два возможных решения для вашего состояния.

Решение 1. Установите для запроса Content-Type значение application/json вместо значения по умолчанию Content-Type: text/plain;charset=UTF-8.

ts:

import { HttpClient, HttpHeaders } from '@angular/common/http';
//...
const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
add(id: number, isPartial: boolean): Observable <any> {
    return this.http.post(this.baseUrl + 'webservice/add/' + id, isPartial, httpOptions);
}

контроллер:

[HttpPost("add/{id}")]
public async Task<IActionResult> Add(int id, [FromBody]bool isPartial)

Решение 2: оберните isPartial в модель, это рекомендуется, если у вас есть несколько параметров.

ts:

add(id: number, isPartial: boolean): Observable <any> {
    return this.http.post(this.baseUrl + 'webservice/add/' + id, { 'isPartial': isPartial });
}

http.post(baseUrl + 'api/SampleData/add/' + id, {'isPartial': isPartial})

контроллер:

public class myModel
{
    public bool isPartial { get; set; }
}

[HttpPost("add/{id}")]
public async Task<IActionResult> Add(int id, [FromBody]myModel myModel)
person Ryan    schedule 13.01.2020

измените привязку параметра в контроллере С# следующим образом

[Route("api/[controller]")]
[ApiController]
public class WebServiceController : ControllerBase
{
    [HttpPost("add/{id}")]
    public async Task<IActionResult> Add( [FromUri]int id, [FromBody]bool isPartial) 
    {
       // isPartial is always false
    }
}
person divyang4481    schedule 12.01.2020