В моем ASP.NET приложения Web API У меня есть контроллер, как это:Autorest/Кураж сгенерированный код для контроллера Web Api, который возвращает файл
[RoutePrefix("api/ratings")]
public class RateCostumerController : ApiController
{
[AllowAnonymous]
[Route("Report/GetReport")]
[HttpGet]
public HttpResponseMessage ExportReport([FromUri] string costumer)
{
var rd = new ReportDocument();
/*No relevant code here*/
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(ms.ToArray())
};
result.Content.Headers.ContentDisposition =
new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = "Reporte.pdf"
};
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/octet-stream");
return result;
}
}
Так что, когда я делаю простой запрос GET с параметром костюмера Я получаю pdf-файл в браузере в качестве ответа. Некоторые из заголовков ответов:
Содержание-Планировка: приложение; имя файла = Reporte.pdf Content-Length: 22331 Content-Type: применение/октет-поток
После настройки чванство, генерируется JSon metadafile и сгенерированный код C# с ним в моем проекте Xamarin PCL я пытался потреблять услугу , Но это не получилось, потому что в сгенерированном коде пытается Deserialize json, но это не результат json!
Здесь часть сгенерированного кода, где она терпит неудачу:
[...]
var _result = new Microsoft.Rest.HttpOperationResponse<object>();
_result.Request = _httpRequest;
_result.Response = _httpResponse;
// Deserialize Response
if ((int)_statusCode == 200)
{
_responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
try
{
_result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject<object>(_responseContent, this.Client.DeserializationSettings);
}
catch (Newtonsoft.Json.JsonException ex)
{
_httpRequest.Dispose();
if (_httpResponse != null)
{
_httpResponse.Dispose();
}
throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex);
}
}
if (_shouldTrace)
{
Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result);
}
return _result;
[...]
Когда я отлажена я выясняю, что содержимое файла находится в теле, так десериализация Мессинг его. Поскольку не рекомендуется редактировать этот сгенерированный файл класса, что мне нужно изменить в моем API, чтобы правильно генерировать код для контента-ответа для приложения/октета-потока?
Вы пробовали использовать Swagger Codegen для генерации клиент C# API вместо этого? Клиент C# API, созданный Swagger Codegen, должен иметь возможность обрабатывать загрузку файла. –
Я нашел код фильтра, который заставил его работать. Но у него все еще есть проблема с сгенерированным кодом. После этого я отправлю его здесь –