2016-07-06 23 views
3

私は以下のコードを持っていますが、基本的に動的オブジェクト(この場合はtypeファイル)を受け取り、クラスを使用してPOSTにWebAPI controller私はコントローラが常に[FromBody]パラメータの値のためにNULLを得ているということを持っています。モデルはWebAPIとクライアントアプリケーションの両方で共有されているHttpClientを使用してWeb APIにJSONデータを投稿する方法

コード

var obj = new 
     { 
      f = new File 
      { 
       Description = description, 
       File64 = Convert.ToBase64String(fileContent), 
       FileName = fileName, 
       VersionName = versionName, 
       MimeType = mimeType 
      }, 
     } 

var client = new HttpClient(signingHandler) 
{ 
    BaseAddress = new Uri(baseURL + path) //In this case v1/document/checkin/12345 
}; 

client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));       

HttpResponseMessage response; 
action = Uri.EscapeUriString(action); 

//Obj is passed into this, currently it is of type File 
var content = new StringContent(JsonConvert.SerializeObject(obj).ToString(), 
      Encoding.UTF8, "application/json"); 

response = client.PostAsync(action, content)).Result; 
if (response.IsSuccessStatusCode) 
{  
    var responseContent = response.Content;     
    string responseString = responseContent.ReadAsStringAsync().Result; 
    return JsonConvert.DeserializeObject<T>(responseString); 
} 

コントローラ

[HttpPost] 
[Route("v1/document/checkin/{id:int}")] 
public void Checkin_V1(int id, [FromBody] File f) 
{ 
     //DO STUFF - f has null on all of its properties 
} 

モデル

public class File 
{ 
    public string FileName { get; set; } 
    public string VersionName { get; set; } 
    public string Description { get; set; } 
    public string MimeType { get; set; } 
    public byte[] Bytes { get; set;} 
    public string File64 { get; set; } 
} 

これがなぜ失敗したのかについての助けがあれば幸いです。

答えて

7

あなたの最初の右のobjは必要ありません。それは別のオブジェクトの内側に入れ子になっています。

var obj = new 
    { 
     f = new File 
     { 
      Description = description, 
      File64 = Convert.ToBase64String(fileContent), 
      FileName = fileName, 
      VersionName = versionName, 
      MimeType = mimeType 
     }, 
    } 

var f = new File 
{ 
    Description = description, 
    File64 = Convert.ToBase64String(fileContent), 
    FileName = fileName, 
    VersionName = versionName, 
    MimeType = mimeType 
}; 

への変更は、それからちょうどFをシリアル化。

+0

魅力的な作品です。ありがとうございます。 –

4

は、私はあなたのコードこのよう

var obj = new 
    { 
     f = new File 
     { 
      Description = description, 
      File64 = Convert.ToBase64String(fileContent), 
      FileName = fileName, 
      VersionName = versionName, 
      MimeType = mimeType 
     }, 
    } 

のこの部分での問題は、あなたが本当に必要なものとは異なってシリアライズされていると思います。 代わりにこれを試してください

var obj = new File 
     { 
      Description = description, 
      File64 = Convert.ToBase64String(fileContent), 
      FileName = fileName, 
      VersionName = versionName, 
      MimeType = mimeType 
     } 
関連する問題