2017-04-22 4 views
2

get 요청을 통해 파일을 보내려고하지만이 코드가 작동하지 않습니다. .NET Core를 사용하고 있으며 Postman에서 API를 테스트하고 있습니다. 웹 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; 


    } 
관련 문제