我正在使用.Net Core API构建一个Angular网站作为后端。当我发布新邮政编码时,我的Angular服务正确发送数据,但我的API没有收到数据。
使用类似的代码编辑(put)工作正常。
添加(发布):postcode values are null in Code,postcodes values are filled in Request Payload
编辑(放):postcode values are not null in Code,the request payload of put
邮编控制器:
[Route("api/[controller]")]
public class PostcodeController : Controller
{
IPostCodeAcces<PostcodeVerwerking, int> _postcodeRepo;
public PostcodeController(IPostCodeAcces<PostcodeVerwerking, int>p)
{
_postcodeRepo = p;
}
[HttpPost]
public IActionResult Post([FromForm]PostcodeVerwerking postcode)
{
int res = _postcodeRepo.AddPostcode(postcode);
if (res != 0)
{
return Ok();
}
return Forbid();
}
[HttpPut("{id}")]
public IActionResult Put(int id, [FromForm] PostcodeVerwerking p)
{
if (id == p.Id)
{
int res = _postcodeRepo.UpdatePostcode(id, p);
if (res != 0)
{
return Ok(res);
}
return NotFound();
}
return NotFound();
}
}
角度服务:
putPostcode(id, formdata: FormData): Observable<PostcodeVerwerking>{
return this.http.put<PostcodeVerwerking>(this.apiUrl + "/" + id, formdata);
}
postPostcode(formdata: FormData): Observable<PostcodeVerwerking>{
return this.http.post<PostcodeVerwerking>(this.apiUrl, formdata);
}
我想PostcodeVerwerking.Id是一个int
类型的属性,所以它不能为null。序列化程序也不能将null绑定到id属性,因此整个PostcodeVerwerking在控制器中将为null。如果要将null作为Id发送,则必须将Id声明为int?
,如:
public int? Id {get; set;}
我修好了它。我只需要在控制器中将postcode
更改为p
并且它有效。
错误:
[HttpPost]
public IActionResult Post([FromForm]PostcodeVerwerking postcode)
{
int res = _postcodeRepo.AddPostcode(postcode);
if (res != 0)
{
return Ok();
}
return Forbid();
}
对:
[HttpPost]
public IActionResult Post([FromForm]PostcodeVerwerking p)
{
int res = _postcodeRepo.AddPostcode(p);
if (res != 0)
{
return Ok();
}
return Forbid();
}