2017-04-22 7 views
2

取得リクエストでファイルを送信しようとしていますが、このコードは機能していません。私は.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; 


    } 
関連する問題