2017-02-27 26 views
0

在我的asp.net webapi项目中,我需要返回字符串json数据作为文件。还有一点很重要,我希望将响应的状态码设置为200(成功)。我发现很多例子,人们使用MemoryStream和FileStreamResult从服务器获取正确的文件,但它不适用于我。ASP.NET Core WebApi - 下载文件导致错误信息

不幸的是,我总是在浏览器中看到“意外错误”的消息,尽管serwer代码没有任何例外。我在浏览器中查看了请求的详细信息,并且其状态码为“错误请求”(400)。

我的代码:

[HttpGet()] 
public async Task<IActionResult> Download() 
{ 
    string jsonData = "example data"; 
    byte[] byteArray = Encoding.UTF8.GetBytes(jsonData); 
    var stream = new MemoryStream(byteArray); 

    var result = new FileStreamResult(stream, new MediaTypeHeaderValue("text/json")) 
         { 
          FileDownloadName = "testFile.json" 
         }; 
    return result; 
} 
+0

它似乎有点像你正在寻找[东西在这个问题回答(http://stackoverflow.com/questions/41383338/how-to -download-A-zip文件-从-A-DOTNET-芯的WebAPI/41395761#41395761)。你尝试过'返回Created(result);'? –

+0

它不适用于我:(。现在我得到消息:ERR_INVALID_RESPONSE。请使用您的示例作为基于字符串变量的流,而不是从服务器上的实际现有文件中获取它。 – Ellbar

回答

0
[HttpGet()] 
    public async Task<HttpResponseMessage> Download() 
    { 
     string jsonData = "example data"; 
     byte[] byteArray = Encoding.UTF8.GetBytes(jsonData); 

var result = new HttpResponseMessage(HttpStatusCode.OK) {Content = new ByteArrayContent(byteArray)}; 
      result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
      result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(Inline) { FileName = "testFile.json" }; 
      return result; 

    } 
+0

我无法编译您的解决方案,因为2错误: (1):'FileStreamResult'不包含'Content'的定义,并且没有扩展方法'Content'接受类型为'FileStreamResult'的第一个参数可能被发现 (2):无法隐含转换类型System。 Net.Http.StringContent到System.Net.Http.HttpResponseMessage – Ellbar

+0

对不起,试试这个 – agfc

+0

现在代码已经编译完成,但是结果在浏览器中以json的形式返回,而不是作为下载的文件返回。 – Ellbar