如何使用Json使用Postman发布premitive类型?

时间:2016-08-30 18:16:26

标签: post postman

我使用ASP.NET核心

开发了简单的API
[Route("api/[controller]/[action]")]
public class WorkunitController : Controller
{
    private IRepository _repository = null;
    public WorkunitController(IRepository repositoty)
    {
        _repository = repositoty;
    }       

    [HttpPost]
    public async Task SetTransformed([FromBody]long id)
    {
        if (ModelState.IsValid)
        {
            await _repository.SetTransformed(id);
        }
    }
  }
}

然后在POSTMAN中我做了以下

  • 设置网址
  • 添加标题
    • "内容类型" as" application / json"
  • 设置正文

    {       " ID":51437665009    }

当我点击发送时,我看到请求来到服务器但ModelState.IsValid是false并且ModelState中有异常

  
      
  • 异常{Newtonsoft.Json.JsonSerializationException:无法将当前JSON对象(例如{" name":" value"})反序列化为类型   ' System.Int64'因为类型需要JSON原始值(例如   string,number,boolean,null)正确反序列化。解决这个问题   错误要么将JSON更改为JSON原始值(例如字符串,   number,boolean,null)或更改反序列化类型以使其为a   普通的.NET类型(例如,不是像整数这样的基本类型,而不是   可以反序列化的集合类型,如数组或List)   来自JSON对象。 JsonObjectAttribute也可以添加到类型中   强制它从JSON对象反序列化。路径' id',第2行,   第17位   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader   reader,Type objectType,JsonContract契约,JsonProperty成员,   JsonContainerContract containerContract,JsonProperty containerMember,   对象existingValue)at   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader   reader,Type objectType,Boolean   checkAdditionalContent)} System.Exception   {Newtonsoft.Json.JsonSerializationException}
  •   

我也尝试发送id作为

   { \"id\":\"51437665009\"}

1 个答案:

答案 0 :(得分:0)

如果使用json作为数据类型,则需要创建用于绑定的自定义类

public class PostModel
{
    public long Id { get; set; }
}

[HttpPost]
public async Task SetTransformed([FromBody]PostModel model)
{
    if (ModelState.IsValid)
    {
        await _repository.SetTransformed(id);
    }
}