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