C# 如何从HttpResponseMessage读取MultipartContent?

C# 如何从HttpResponseMessage读取MultipartContent?,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,我有以下WebApi,它将MultipartContent返回给客户端,其中包含来自数据库的图像和一些附加数据:- public class PhotoController : ApiController { public HttpResponseMessage GetPhoto(Int32 personId) { var service = new PhotoService(); var photo = service.SelectPr

我有以下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;
    }
}
公共类光控制器:ApiController
{
公共HttpResponseMessage GetPhoto(Int32 personId)
{
var service=newphotoservice();
var photo=服务。选择Primaryphoto(personId);
如果(照片==null)
返回Request.CreateResponse(HttpStatusCode.NoContent);
HttpResponseMessage response=Request.CreateResponse(HttpStatusCode.OK);
var content=新的MultipartContent();
添加(新的ObjectContent(照片,新的JsonMediaTypeFormatter());
添加(新的StreamContent(photo.Image));
响应。内容=内容;
返回响应;
}
}

在客户端上,HttpResponseMessage.Content显示为StreamContent类型。如何将其作为MultipartContent访问?客户端是WPF-不是Web浏览器。

您可以使用中的帮助程序方法读取客户端的内容。

首先,您需要添加对
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(); 

不是真的。我没想到我需要为“multipart/mixed”实现自己的MediaTypeFormatter。可以轻松处理HttpRequestMessage中的MultipartContent,因此格式化程序必须在那里。如何在客户端上读取多部分内容并不明显。或者?请参阅已接受答案中的评论,以获得一些示例的链接。谢谢Jim。我浏览了所有可能的WebApi示例,花了很长时间在internet上搜索,但没有找到任何关于在客户端上读取多部分的内容。我不会认为这种情况如此罕见。您是否尝试过使用ReadAsMultipartAsync方法?Henrik的博客文章中有一个在服务端接受请求的多部分阅读内容的例子:Kiran,谢谢你的链接,我错过了这篇文章,尽管我读过很多其他与ReadAsMultipartAsync相关的文章。我的问题是ReadAsMultipartAsync由于某种原因没有出现在response.Content上,所以我认为它不可用。它现在在那里。:)明天早上我会再来一次。感谢那些在Google上找到这一点的人发表的评论:
ReadAsMultipartAsync
如果没有安装NuGet提供的
Microsoft.AspNet.WebApi.Client
软件包,就不可用。还请注意,使用此方法时,此程序包与Microsoft.Net.Http发生冲突,因此请先删除该程序包。