WebApi - передача streamContent обратно клиенту с ошибкой 500 - PullRequest
0 голосов
/ 29 мая 2018

Я получаю следующую ошибку и не знаю, где ее исправить.Код компилируется и запускается, но я получаю 500 обратно, что означает, что в коде сервера что-то не так.Я обнаружил это при отладке .... мысли?

ошибка CS1503: Аргумент 1: невозможно преобразовать из 'System.Net.Http.HttpContent' в 'System.Collections.Generic.IEnumerable'

сильный текст

 public async void ExportData()
{
  //code to request data from the server
 requestUri = ipaddress:port/api/data/export?dataFileId={Id};
 var response = await Client.GetAsync(requestUri);

}

Контроллер

[HttpGet]    
[Route("export")] 
public HttpResponseMessage Export
var fileContents = _dataService.ExportDataFiles(dataFileId);
                var fileLines = string.Empty;
                //  fileContents.Lines.Aggregate(fileLines, (s, s1) => s+=s1 + Environment.NewLine);
                using (var multipartContent = new MultipartContent())
                {
                    foreach (var fileContent in fileContents)
                    {
                        foreach (var fileLine in fileContent.Lines)
                        {
                            fileLines += fileLine + Environment.NewLine;
                        }
                        var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(fileLines));
                        var streamContent = new StreamContent(fileStream);
                        streamContent.Headers.ContentType =
                                       System.Net.Http.Headers.MediaTypeHeaderValue.Parse(
                                          "multipart/related; boundary=cbsms-main-boundary"); 

                        streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                         {

                             FileName = fileContent.Name
                         };

                        streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/data");

                        multipartContent.Add(streamContent);                        
                    }

                      var response = Request.CreateResponse(HttpStatusCode.OK);
                       response.Content = multipartContent;

                    return response;
                }

1 Ответ

0 голосов
/ 31 мая 2018

Я не смог найти хорошего ответа о том, как лучше отправить элементы назад или как справиться с этим конфликтом, поэтому я решил использовать WebApi 2 IHttpActionResult.Это отличный пример использования и УСПЕХА !!!Я абстрагировал создание HttResponseMessage и отправил весь набор данных в Json клиенту.Я проверил это с Почтальоном и Фиддлером, затем смог разбить Json, не разбирая напрямую, а используя приведение.Проверьте это!

Уменьшено количество строк в моем коде на контроллере

    [HttpGet]
    [Route("export")]
    public IHttpActionResult ExportActionResult(Guid dataFileSetId)
    {
        var fileContents = _dataService.ExportParameterFiles(dataFileSetId);

         return Ok(fileContents);          

    }

С клиента:

 public async void ExportData()
{
   //code to request data from the server
   requestUri = ipaddress:port/api/data/export?dataFileId={Id};
   var response = await Client.GetAsync(requestUri);

  var result = responseTask;
        if(result.IsSuccessStatusCode)
        {
            var readTask = 
                result.Content.ReadAsAsync<IEnumerable<DataFlatFileDto>>();
            readTask.Wait();
}

Теперь задача чтения содержит файлы, которые яотправлены с сервера, и они преобразуются в DataFileDto, поэтому имя и части данных установлены, и данные готовы для использования на клиенте!

Эта статья была ключевой в изложении того, как использовать IHttpActionResult:http://www.tutorialsteacher.com/webapi/consuming-web-api-in-dotnet-using-httpclient

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...