2017-04-22 51 views
2

我想通過獲取請求發送文件,但是此代碼無法正常工作。我正在使用.NET Core並使用Postman測試API。無法從web api獲取文件

// POST api/values 
[HttpGet] 
public HttpResponseMessage Get(string filename) 
{ 
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
    var stream = new FileStream($"Scans/{filename}.obj", FileMode.Open, FileAccess.Read); 
    result.Content = new StreamContent(stream); 
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
    return result; 
} 

當我測試過郵遞員的要求,我得到這個,而不是我流:

{ 
"version": { 
"major": 1, 
"minor": 1, 
"build": -1, 
"revision": -1, 
"majorRevision": -1, 
"minorRevision": -1 
}, 
"content": { 
"headers": [ 
    { 
    "key": "Content-Type", 
    "value": [ 
     "application/octet-stream" 
    ] 
    }, 
    { 
    "key": "Content-Length", 
    "value": [ 
     "8785871" 
    ] 
    } 
] 
}, 
"statusCode": 200, 
"reasonPhrase": "OK", 
"headers": [], 
"requestMessage": null, 
"isSuccessStatusCode": true 
} 
+0

這個怎麼樣[示例](http://stackoverflow.com/questions/42271947/post-stream-in-asp-net-core-web-api)? –

回答

2

HttpResponseMessage來自以前的框架版本。你必須使用一個IActionResult實現的類。

您可以通過控制器返回文件流結果。

[HttpGet] 
public IActionResult Get(string filename) { 
    var path = $"Scans/{filename}.obj"; 
    var stream = new FileStream(path, FileMode.Open, FileAccess.Read); 
    var response = File(stream, "application/octet-stream"); // FileStreamResult 
    return response; 
} 
1

所以,這真是奇怪的是,我的代碼沒有工作,但這裏是一些工作的代碼。看起來HTTPResponseMessage不能發送文件。相反,你必須返回一個FileResult對象。

[HttpGet] 
    public FileResult Get(string filename) 
    { 

     string path = $"Scans/{filename}.obj"; 

     FileContentResult result = new FileContentResult(System.IO.File.ReadAllBytes(path), "application/octet-stream") 
     { 
      FileDownloadName = path 
     }; 
     return result; 


    }