在角度PUT请求中,Asp.Net Core FromBody参数始终为null

时间:2018-07-21 10:47:06

标签: c# angular asp.net-core angular-httpclient

我尝试更新项目中工作人员的身份,我使用带有 put 的HttpClient,在Angular 6项目和.NET Core上的Web API 2中工作。您可以在前端看到请求:

updateWorkerIdentity(worker: WorkerRead) : Observable<WorkerRead> {
    const url = 'workerinfo/activeContractId=' + worker.activeContract.id;
    return this.httpClient.put<WorkerRead>(url , JSON.stringify(worker) ); 
}

在API方面:

[HttpPut("{activeContractId}")]
public async Task<IActionResult> Put([FromRoute] string activeContractId, [FromBody] WorkerRead worker)
{
    var companyId = GetCompanyId();
    var period = GetPeriod();
    var language = GetLanguage();
    var workerInfo = await _workerInfoService.UpdateWorkerIdentity(companyId, activeContractId, language, worker);

    return Ok(workerInfo);
}

来自activeContractId的{​​{1}}发送得很好,但工作人员仍然为 null

从尸体派出的工作人员发送得很好,如您在有效负载中所见:

enter image description here

并且标题的Content-Type很好[FromRoute]

有人有主意吗?

1 个答案:

答案 0 :(得分:1)

对于一个简单的端点,服务器端的一切看起来都很好。

但是,基于[HttpPut("{activeContractId}")]路由模板,应将客户端的请求重构为与期望的模板匹配

updateWorkerIdentity(worker: WorkerRead) : Observable<WorkerRead> {
    const url = 'workerinfo/' + worker.activeContract.id;
    return this.httpClient.put<WorkerRead>(url , worker); 
}

我怀疑httpClient在发送之前会在内部对有效负载进行字符串化。

以上代码假定已定义控制器

[Route("[controller]")]
public class WorkerInfoController : Controller {

    //...

    //PUT workerinfo/123456
    [HttpPut("{activeContractId}")]
    public async Task<IActionResult> Put([FromRoute] string activeContractId, [FromBody] WorkerRead worker) {
        var companyId = GetCompanyId();
        var period = GetPeriod();
        var language = GetLanguage();
        var workerInfo = await _workerInfoService.UpdateWorkerIdentity(companyId, activeContractId, language, worker);

        return Ok(workerInfo);
    }    
}
相关问题