.Net5后端接收空JSON

.Net5后端接收空JSON,json,angular,api,http-post,.net-5,Json,Angular,Api,Http Post,.net 5,我用.Net5和一个有角度的前端实现了一个简单的服务器。我的api与post man一起工作,但前提是我将内容类型设置为application/x-www-form-urlencoded。当我使用等于application/json的内容类型时,服务器接收空的json。当我使用前端时,我想我会向服务器发送一个application/json,因为它接收的是空的。下面是我的代码 api.service.ts public createProva(prova:Iprova):可观察{ 返回this.

我用.Net5和一个有角度的前端实现了一个简单的服务器。我的api与post man一起工作,但前提是我将内容类型设置为application/x-www-form-urlencoded。当我使用等于application/json的内容类型时,服务器接收空的json。当我使用前端时,我想我会向服务器发送一个application/json,因为它接收的是空的。下面是我的代码

api.service.ts

public createProva(prova:Iprova):可观察{
返回this.http.post(this.Url,prova);
}
当我输入console.log prova时,它将返回正确的Json

控制器.cs

[HttpPost]
[路由(“url”)]
公共异步任务postProva(provaDto s)
{
porvaModel prova=新provaModel
{
Id=s.Id,
Name=s.Name
};
_context.provaModel.Add(prova);
wait_context.SaveChangesAsync();
返回createDataAction(nameof(getProva),new{id=prova.id},prova);
}

但当后端接收到provaDto时,s为空,id为0,name为null。

为简单起见,我假设您的控制器有如下基本设置:

[ApiController]
[Route("[controller]")]
public class ProvaController : ControllerBase
出于开发目的,我还在startup.cs中禁用https重定向,同时保留默认路由功能

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {     
        if (!env.IsDevelopment())
        {
            app.UseHttpsRedirection();
        }

        app.UseRouting();            

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
我将保留相同的post方法:

    [HttpPost]
    
    public async Task<IActionResult> postProva(provaDto s)
    {
        porvaModel prova = new provaModel
        {
            Id = s.id,
            Name = s.name
        };

        _context.provaModel.Add(prova);
        await _context.SaveChangesAsync();
        return CreatedAtAction(nameof(getProva), new { id = prova.Id }, prova);
    }
对于角度部分,您可以使用httpOptions指定重新请求的内容类型:

httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json',
  })
};
public createProva(prova:Iprova): Observable<Iprova> {
    return this.http.post<Iprova>( this.Url, prova , this.httpOptions);
}
httpOptions={
标题:新的HttpHeaders({
“内容类型”:“应用程序/json”,
})
};
公共createProva(prova:Iprova):可观察{
返回this.http.post(this.Url、prova、this.httpOptions);
}

“当我使用与应用程序json相同的内容类型时,服务器接收到空json。”这是
应用程序/json
,而不是
应用程序json
“当我console.log prova返回正确的json”这是什么意思?您的类型是
Iprova
。如果它是JSON,它将是一个字符串。JSON是用于数据交换的文本表示法。如果您处理的是JavaScript/TypeScript源代码,而不是字符串,那么您就不是在处理JSON。我看到您已经更改了问题,因此它现在使用
application/JSON
,而不是
application JSON
。但是,您在测试时实际使用了正确的值吗?
httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json',
  })
};
public createProva(prova:Iprova): Observable<Iprova> {
    return this.http.post<Iprova>( this.Url, prova , this.httpOptions);
}