2016-07-26 12 views
1

Ich möchte eine komplexe Antwort für Anforderungen in Web-API zurückgegeben haben. Zum Beispiel möchte ich einen Stream mit einem komplexen Objekt zurückgeben. Ich versuchte es mit MultipartFormDataContent zu tun:MultipartContent-Antwort in Web-API

public static HttpResponseMessage GetMultipartResponse<T>(T responseData, Stream streamToReturn) 
    { 
     return new HttpResponseMessage 
     { 
      Content = new MultipartContent 
      { 
       new StreamContent(streamToReturn), 
       new ObjectContent<T>(responseData, new JsonMediaTypeFormatter()) 
      } 
     }; 
    } 

ich ein normales HttpResponseMessage auf Server-Seite haben. Ich kann durch Debugger sehen, wie meine Web-API-Methode, um diese Antwort zurückgibt, aber auf der Client-Seite habe ich einen Fehler bekam:

StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Pragma: no-cache 
    X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNccnVzdGFtX3NhbGFraHV0ZGlub3ZcZG9jdW1lbnRzXHZpc3VhbCBzdHVkaW8gMjAxM1xQcm9qZWN0c1xGaWxlU2VydmljZUFQSVxGaWxlU2VydmljZUFQSVxhcGlcZ2V0?= 
    Cache-Control: no-cache 
    Date: Tue, 26 Jul 2016 08:30:22 GMT 
    Server: Microsoft-IIS/8.0 
    X-AspNet-Version: 4.0.30319 
    X-Powered-By: ASP.NET 
    Content-Length: 1444 
    Content-Type: application/json; charset=utf-8 
    Expires: -1 
} 

Es gibt keine anderen Ausnahmen auf Client- oder Server-Seite und ich kann nicht etwas bekommen weitere Informationen mit wiederum auf Fehler Detail:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

UPDATE: Try Antwort auf Client-Seite lesen mit:

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

Und habe diese Ausnahme:

Invalid 'HttpContent' instance provided. It does not have a content type header starting with 'multipart/'.

Wohin gehe ich falsch?

UPDATE 2: Ich habe normale Antwort auf der Seite Server:

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.MultipartContent, Headers: 
    { 
     Content-Type: multipart/multipart; boundary="3e6d3573-9031-41a7-b7f4-d1421bc1451d" 
    } 

Antwort

0

ich den Fehler gefunden. Ich kehre meine mehrteiliger Inhalt innen mit:

 using (var stream = MyFileStream()) 
     { 
      var respone = MultipartResponseHelper.GetMultipartResponse(response, stream, Request); 
      return respone; 
     } 

So ist es richtige Antwort gibt, aber dann Strom innerhalb multipartContent angeordnet werden, welche der Grund des Problems ist.