通过API端点发送文件

时间:2018-02-07 09:57:46

标签: c# .net .net-core

我正在使用.NET核心构建一个简单的API,并希望在到达API上的某个端点后向客户端发送一个简单的.json文件。

到目前为止,我的成功很少,但我目前的情况如下:

public IActionResult yaddayadda(){
        var filePath = "./Data/file.json";

        using (var stream = new FileStream(@filePath, FileMode.Open))
        {
            return new FileStreamResult(stream, "application/json");
        }
}

这对我一无所获。 (文件的路径是正确的)

谢谢!

编辑:我已尝试过不同的内容类型,即使它不是正确的,但是multipart / form-data允许我下载文件,但它没有扩展名。

2 个答案:

答案 0 :(得分:4)

尝试这样做,避免流的处理(闭包):

    public IActionResult yaddayadda()
    {
        var filePath = "./Data/file.json";
        return this.PhysicalFile(filePath, "application/json");
    }

更新:这是我用于图片的另一种方式,尽管应该表现相同:

<api xmlns="http://ws.apache.org/ns/synapse" name="synapse" context="/synapse">
   <resource methods="GET" uri-template="/2">
      <inSequence>
         <property name="REST_URL_POSTFIX" value="hello/mkyongdemo" scope="axis2" type="STRING"/>
         <log level="custom">
            <property name="category" expression="$axis2:REST_URL_POSTFIX"/>
         </log>
         <property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/>
         <send>
            <endpoint>
               <address uri="http://localhost:8280/RESTfulExample/rest" format="pox"/>
            </endpoint>
         </send>
      </inSequence>
   </resource>
</api>

请注意,此解决方案意味着您从Controller类派生,因为“PhysicalFile”方法是公开的。

答案 1 :(得分:2)

尝试使用

byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
string fileName = "file.json";
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);

有用的link