最近在為自己所在的演講俱樂部開發一個小程序,后端是用.NET CORE 來實現,今天遇到了一個奇怪的問題,一直報400 bad request請求錯誤。
前端代碼:
let url = behavior=='like'?'like':'like/cancel';
this.request({
url:url,
method:'POST',
data:{
id:likeid
}
})
后端代碼:
[HttpPost]
public async Task<IActionResult> doLike([FromBody]int like_id)
{
return await Task.Run(() =>
{
jService.UpdateLikeStatus(model.Id, true);
return Ok();
});
}
然后奇怪的是一直報錯,400-Bad Request
,最后不斷調試,還把參數請求屬性改成了[FromHeader]
, 結果發現前端的代碼能跳到這個方法里面,只是like_id
一直未0 。
最后無奈,推測是不是POST參數是不是需要對一個復合類型(非簡單類型,比如int
,string
等)。最后把參數請求改成了強類型,竟然可以了!
[HttpPost]
public async Task<IActionResult> doLike([FromBody] Journal_Member_Likes model)
{
return await Task.Run(() =>
{
jService.UpdateLikeStatus(model.Id, true);
return Ok();
});
}
可以看到傳遞進來的Id跟前端是一樣的了。
事后在博客園翻了一下文章,發現有個人遇到的情況跟我是一樣的。不過他是通過修改基本數據類型為object
類型來達到傳參的目的:
public string PostTest([FromBody]object value)
{
return "Got it!";
}
以及還有評論說:
//單個參數的情況下:
jquery這樣提交:$.ajax({
url:"http://127.0.0.1:18170/api/coderecord",
type:"post",
data:{"":"13777777777"},
success:function(data){
}
});