模型活页夹找不到发布数据

时间:2018-10-14 14:52:47

标签: asp.net-web-api asp.net-core-webapi

我有一个简单的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具有一个值。

有什么理由不起作用吗?

2 个答案:

答案 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();
}