2017-12-25 3 views
0

私は以下のMVC投稿を持っています。 ファイルの内容をAPIに投稿します。クライアントに追加オブジェクトを送信するにはどうすればいいですか(ファイルの内容と共に)

[HttpPost] 
public ActionResult FileUpload_Post() 
{ 
    if (Request.Files.Count > 0) 
    { 
     var file = Request.Files[0]; 

     using (HttpClient client = new HttpClient()) 
     { 
      using (var content = new MultipartFormDataContent()) 
      { 
       byte[] fileBytes = new byte[file.InputStream.Length + 1];      file.InputStream.Read(fileBytes, 0, fileBytes.Length); 
       var fileContent = new ByteArrayContent(fileBytes); 
       fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = file.FileName }; 
       content.Add(fileContent); 
       var result = client.PostAsync(requestUri, content).Result; 
       if (result.StatusCode == System.Net.HttpStatusCode.Created) 
       { 
        ViewBag.Message= "Created"; 
       } 
       else 
       { 
        ViewBag.Message= "Failed"; 
       } 
      } 
     } 
    } 
    return View(); 
} 

追加のカスタムオブジェクト(json形式が好ましい)をファイルの内容とともに渡したいのですが?

CustomObject obj = new CustomObject; 
obj.FirstName = "A"; 
object.LastName = "B"; 

注:以下は、上記のリクエストを受け取るApiメソッドです。

[HttpPost] 
public HttpResponseMessage Upload() 
{ 
    if(!Request.Content.IsMimeMultipartContent()) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    } 
    if (System.Web.HttpContext.Current.Request.Files.Count > 0) 
    { 
     var file = System.Web.HttpContext.Current.Request.Files[0]; 
     .... 
     // save the file 
     .... 
     return new HttpResponseMessage(HttpStatusCode.Created); 
    } 
    else 
    { 
     return new HttpResponseMessage(HttpStatusCode.BadRequest); 
    } 
} 

答えて

0

まず、CustomObjectをjsonにシリアル化する必要があります。例えばJson.NET

var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj); 

を使用して、あなたが同じようMultipartFormDataContentjsonStringを追加することができます。APIプロジェクト場合

var jsonString = System.Web.HttpContext.Current.Request.Form["CustomObject"]; 

によって投稿JSONコンテンツを取得し、Upload API方式で

var jsonContent = new StringContent(jsonString); 
content.Add(jsonContent, "CustomObject"); 

CustomObjectクラスへの参照がある場合、jsonStringをデシリアライズするには

var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<CustomObject>(jsonString); 

ない場合は、dynamicオブジェクトにデシリアライズできます

var obj = Newtonsoft.Json.Linq.JObject.Parse(jsonString); 
関連する問題