WebApi - 将streamContent传递回客户端获取错误500

时间:2018-05-29 16:57:50

标签: .net asp.net-web-api

我收到以下错误,我不知道在哪里修复它。 代码编译并运行,但我得到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 :(得分:0)

我无法找到关于如何最好地发送项目或如何处理冲突的好答案,所以我决定使用WebApi 2 IHttpActionResult。这是一个很好的用例和成功! 我抽象了HttResponseMessage的创建,并将Json中的整个数据集发送到客户端。我用Postman和Fiddler对此进行了验证,然后能够在没有直接解析的情况下突破Json,但是使用了cast。 看看这个!

减少控制器上代码中的行数

    [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