如何从HttpResponseMessage读取MultipartContent?

Ora*_*rac 5 .net c# asp.net-web-api

我有以下WebApi,它将MultipartContent返回给客户端,其中包含来自数据库的图像和一些附加数据: -

    public class PhotoController : ApiController
{

    public HttpResponseMessage GetPhoto(Int32 personId)
    {
        var service = new PhotoService();
        var photo = service.SelectPrimaryPhoto(personId);
        if (photo == null)
            return Request.CreateResponse(HttpStatusCode.NoContent);
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
        var content = new MultipartContent();
        content.Add(new ObjectContent<Photo.Data>(photo, new JsonMediaTypeFormatter()));
        content.Add(new StreamContent(photo.Image));
        response.Content = content;
        return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

在客户端上,HttpResponseMessage.Content表示为StreamContent类型.如何以MultipartContent的形式访问它?客户端是WPF - 而不是Web浏览器.

A-S*_*ani 6

首先,您需要添加对System.Net.Http.Formatting,的引用

那么您将可以访问扩展方法.ReadAsMultipartAsync()

示例

using System.Net.Http.Formatting;

// ...

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsyc("{send the request to api}");

var content = await response.Content.ReadAsMultipartAsync();

var stringContent = await content.Contents[0].ReadAsStringAsync();
var streamContent = await content.Contents[1].ReadAsStreamAsync(); 
Run Code Online (Sandbox Code Playgroud)

  • 对那些从 Google 发现这一点的人的快速评论:如果不从 NuGet 安装 `Microsoft.AspNet.WebApi.Client` 包,`ReadAsMultipartAsync` 不可用。另请注意,使用此方法时,此包会与“Microsoft.Net.Http”静默冲突,因此请先删除该包。 (3认同)

Rag*_*nti 0

您可以使用HttpContentMultipartExtensions中的辅助方法来读取客户端的内容。