2017-08-28 5 views
1

私は2つのマイクロサービスを持つMVCアプリケーションを持っています。最初に私がJSONをカスタムクラスにデシリアライズするnullを返す

[HttpPost, Route("logo")] 
    public Task<FileUploadResultModel> SaveAsync([FromBody]Logo model) 
    {    
     return _fileService.SaveAsync(null); 
    } 

を使用してデシリアライズしようとするが、それはnullを取得する第2のマイクロサービスで

public async Task PostLogo(Logo logo) 
    { 
     using (var client = new HttpClient()) 
     { 
      await client.PostAsync(_url, new StringContent(JsonConvert.SerializeObject(logo), Encoding.UTF8, "application/json")); 
     } 
    } 

別のサービスに私のカスタムオブジェクト

public class Logo { 
    public Guid Id { get; set; } 
    public IEnumerable<byte> Content { get; set; } 
} 

を送信するためにPostAsync()メソッドを呼び出します入力オブジェクトの代わりに

enter image description hereです。

投稿リクエストを使用してカスタムオブジェクトを送信/処理する方法は誰でも説明できますか?

+0

更新アクションにコンテンツを変換します。フレームワークはデシリアライズし、オブジェクトモデルをバインドします – Nkosi

+0

ありがとうございます。残念ながら、実際のデシリアライゼーションの前には、入力文字列で 'null'です。私は 'モデル'の値がnullであることを意味しますが、 'JsonConvert.SerializeObject(ロゴ)'をチェックすると、実際の結果を必要なパラメータで返します。だから私はリクエストを送信する間に何か間違っていると思いますか? –

+0

これは同じですが、異なるマイクロサービスにあります。私はクラスの名前を変更しましたが、それでもnullです –

答えて

1

優先する構文構造に従うようにアクションを更新しました。

[HttpPost, Route("logo")] 
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) { 
    if(ModelState.IsValid) { 
     FileUploadResultModel result = await _fileService.SaveAsync(model); 
     return Ok(result); 
    } 
    return BadRequest(); 
} 

コメントに基づいて、バイト配列が大きすぎてモデルバインダーがモデルを正しくバインドできない可能性があります。 web.configを確認し、送信可能なデータの最大サイズを確認してください。それを増やす必要があるかもしれません。最大値は2GBですが、このような高い値に対しては助言します。

チェックこの回答:Maximum request length exceeded

あなたは文字列にその画像を符号化する画像を小さくしますがBase64でなければならないURLを取得することができますし、コンテンツとしてことを送信した場合。

public class Logo { 
    public Guid Id { get; set; } 
    public string Content { get; set; } 
} 

そして、あなたはモデルを得るバック `タスク SaveAsync([FromBody] OutlookLogoモデル)`へのバイト配列

[HttpPost, Route("logo")] 
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) { 
    if(ModelState.IsValid) { 
     byte[] content = Convert.FromBase64String(model.Content); 
     var id = model.Id; 
     //... 
     return Ok(result); 
    } 
    return BadRequest(); 
} 
関連する問題