2016-08-30 65 views
0

我一直在使用簡單的API開發ASP.NET核心如何使用Postman使用Json發佈premitive類型?

[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); 
     } 
    } 
    } 
} 

然後在郵差我做了以下

  • 設置URL
  • 添加頁眉
    • 「內容類型」 爲「application/json」
  • 設定的主體

    { 「身份證」:51437665009 }

當我點擊發送,我看到的請求到達服務器,但ModelState.IsValid是false並有例外的ModelState

  • 異常{Newtonsoft.Json.JsonSerializationException:不能反序列化當前JSON對象(例如{「name」:「value」})類型爲 'System.Int64',因爲該類型需要JSON原始值(例如 string,number,boolean,null)才能正確反序列化。若要修復此錯誤,請將JSON更改爲JSON原始值(例如,字符串, 數字,布爾值,空值)或更改反序列化類型,以使其爲正常的.NET類型(例如,不是像integer這樣的基本類型,不是一個 集合類型,如數組或列表),可以從JSON對象反序列化 。 JsonObjectAttribute也可以添加到類型 中,以強制它從JSON對象反序列化。路徑的 'id',第2行, 位置17.在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader 讀卡器,類型的objectType,JsonContract合同,JsonProperty構件, JsonContainerContract containerContract,JsonProperty containerMember, 對象existingValue)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader 讀卡器,類型的objectType,布爾 checkAdditionalContent)}的System.Exception {Newtonsoft.Json.JsonSerializationException}

我也曾嘗試發送id作爲

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

回答

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); 
    } 
}