我有一个简单的jquery帖子
function saveImage(base64) {
$.post("http://localhost:50575/api/images", {base64Data: base64});
}
这违反了.net核心控制器
[HttpPost]
public async Task<ActionResult> Post(string base64Data)
{
var base64 = Request.Form["base64Data"];
return Ok();
}
发布数据后,base64Data
为空。但是,从表单变量填充的base64
具有一个值。
有什么理由不起作用吗?
答案 0 :(得分:1)
$.post("http://localhost:50575/api/images", {base64Data: base64})
发送的是:
POST /api/images HTTP/1.1
Content-Type: application/x-www-form-urlencoded
base64Data=xxxxxxxx
由于您发送的内容类型为 application/x-www-form-urlencoded
的请求已由 ApiController
处理,因此,您应该装饰 [FromForm]
public async Task<ActionResult> Post([FromForm] string base64Data)
{
// ...
}
或者,如果您想发送以application/json
编码的请求,则应首先创建一个DTO
来容纳整个播放量:
public class Base64Dto{
public string Base64Data{get;set;}
}
并同时用[FromBody]
装饰参数:
public async Task<ActionResult> Post([FromBody] Base64Dto base64Data)
{
// var base64 = Request.Form["base64Data"];
return Ok();
}
使用Base64Dto
保留整个有效负载的另一种方法是发送带有Content-Type: application/x-www-form-urlencoded
头的请求,并同时使用[FromForm]
属性:
public async Task<ActionResult> Post([FromForm] Base64Dto base64Data)
{
// var base64 = Request.Form["base64Data"];
return Ok();
}
答案 1 :(得分:-1)
在绑定POST请求中的模型时,需要使用 [FromBody] 属性。
[HttpPost]
public async Task<ActionResult> Post([FromBody]string base64Data)
{
var base64 = Request.Form["base64Data"];
return Ok();
}