.Net5 后端收到空 JSON
.Net5 backend receives empty JSON
我用 .Net5 和 Angular 前端实现了一个简单的服务器。我的 api 与 post man 一起工作,但前提是我将 Content-Type 设置为 application/x-www-form-urlencoded。当我使用等于 application/json 的 Content-Type 时,服务器收到空 json。当我使用我的前端时,我想我向服务器发送了一个 application/json 因为它收到了一个空的。在我的代码下面。
api.service.ts
public createProva(prova:Iprova): Observable<Iprova> {
return this.http.post<Iprova>( this.Url, prova );
}
当我console.logprova它return一个正确的Json
controller.cs
[HttpPost]
[Route("url")]
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);
}
但是当后端接收到 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);
}
至于 Postman 设置,我在 http://localhost:5000/Prova 上使用 POST 请求(我使用 dotnet CLI 使用默认的 launchSettings),我也保持默认 headers .在 Body 中,我将使用原始格式和 select JSON 格式,为其提供一个简单的负载:
{
"id": 0,
"name": "string"
}
至于 angular 部分,您可以使用 httpOptions 指定请求的 content-type :
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
})
};
public createProva(prova:Iprova): Observable<Iprova> {
return this.http.post<Iprova>( this.Url, prova , this.httpOptions);
}
我用 .Net5 和 Angular 前端实现了一个简单的服务器。我的 api 与 post man 一起工作,但前提是我将 Content-Type 设置为 application/x-www-form-urlencoded。当我使用等于 application/json 的 Content-Type 时,服务器收到空 json。当我使用我的前端时,我想我向服务器发送了一个 application/json 因为它收到了一个空的。在我的代码下面。
api.service.ts
public createProva(prova:Iprova): Observable<Iprova> {
return this.http.post<Iprova>( this.Url, prova );
}
当我console.logprova它return一个正确的Json
controller.cs
[HttpPost]
[Route("url")]
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);
}
但是当后端接收到 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);
}
至于 Postman 设置,我在 http://localhost:5000/Prova 上使用 POST 请求(我使用 dotnet CLI 使用默认的 launchSettings),我也保持默认 headers .在 Body 中,我将使用原始格式和 select JSON 格式,为其提供一个简单的负载:
{
"id": 0,
"name": "string"
}
至于 angular 部分,您可以使用 httpOptions 指定请求的 content-type :
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
})
};
public createProva(prova:Iprova): Observable<Iprova> {
return this.http.post<Iprova>( this.Url, prova , this.httpOptions);
}