2015-02-19 2 views
2

Я пытаюсь найти правильный & лучший способ десериализации ответа из метода App.Net Web Api, который возвращает байт [].Deserialize byte [] из ASP Web Api IHttpActionResult

Метод Web Api выглядит следующим образом

public IHttpActionResult Get() 
{ 
    byte[] content = GetContent(); 
    return Ok(content); 
} 

я называю конечной

string content; 
using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://localhost/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 

    HttpResponseMessage response = await client.GetAsync("api/v1/thecorrectpath"); 
    if (response.IsSuccessStatusCode) 
    { 
     content = await response.Content.ReadAsStringAsync(); 
    } 
} 

Когда я прочитал ответ на content это в формате ниже

<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">SfSEjEyNzE9MNgMCD2a8i0xLjcNJeLjzC...R4Cg==</base64Binary> 

Что было бы лучшим способом конвертировать этот ответ в byte[]?

ответ

4

Я хотел бы использовать json.net для это.

Web API:

public string Get() 
{ 
    byte[] content = GetContent(); 
    var data = JsonConvert.SerializeObject(content); 
    return data; 
} 

Клиент:

private static async Task GetData() 
{ 
    string content; 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:23306/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 

     HttpResponseMessage response = await client.GetAsync("home/get"); 
     if (response.IsSuccessStatusCode) 
     { 
      content = await response.Content.ReadAsStringAsync(); 
      var data = JsonConvert.DeserializeObject<byte[]>(content); 
     } 
    } 
} 
3

Вы можете вернуть двоичные данные из метода Web Api. Объект мс представляет собой поток памяти Вы можете задать более конкретный ContentType

На сервере:

var result = new HttpResponseMessage(HttpStatusCode.OK); 
result.Content = new ByteArrayContent(ms.ToArray()); 
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
return result; 

Тогда на клиенте:

response.Content.ReadAsByteArrayAsync(); 
+0

Нет, содержание начинается с ' ojhawkins

+0

Не знаете, почему он отображается как xml, но если вы получите фактическую строку base64, вы можете использовать Convert.FromBase64String, которая возвращает байт[] –

1

Во-первых, установить NuGet пакет Microsoft.AspNet.WebApi.Client;

Затем использовать общий метод расширения содержания HTTP:

c# var result = await response.Content.ReadAsAsync<byte[]>();

Это должно работает!

Смежные вопросы