Angular параметр, передаваемый моему контроллеру, всегда ложен - PullRequest
0 голосов
/ 12 января 2020

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

Вот мой код в 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
    }
}

Ответы [ 2 ]

1 голос
/ 13 января 2020

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

Решение 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)
0 голосов
/ 12 января 2020

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

[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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...