如何另外包含File作为WebAPI的响应

时间:2017-11-13 13:49:21

标签: c# json asp.net-web-api asp.net-web-api2 filestream

我当前的网络API已经响应如下的JSON数据。

public HttpResponseMessage GetFieldInfo()
        {
  //....  
return Ok(GetFieldsInstance());  //GetFieldsInstance returning with DTO class instance.
}

现在,我需要包含,文件和JSON响应。我找不到任何显示的链接,如何在单个响应中包含filestream和JSON。

对于文件流,它将如下工作,但无法找到方法,如何在文件流中包含JSON对象属性。

result = Request.CreateResponse(HttpStatusCode.OK);
                result.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
                result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
                result.Content.Headers.ContentDisposition.FileName = "FieldFile";

1 个答案:

答案 0 :(得分:1)

您可以将文件转换(序列化)为base64字符串,并将其作为JSON响应中的属性包含在内。

public IHttpActionResult GetFieldInfo() {
    //...

    var model = new { 
        //assuming: byte[] GetBinaryFile(...)
        data = Convert.ToBase64String(GetBinaryFile(localFilePath)), 
        result = "final",
        //...other properties...
    };

    return Ok(model);
}

然后,客户端需要将base64字符串转换(desrialize)回所需的文件,以便根据需要使用。

请注意,根据文件的大小,它可以大大增加响应的大小,客户端应该考虑到这一点。