通过 .NET Core Api 从请求获取文件

Moj*_*ack 1 .net c# rest restsharp asp.net-core

我不知道如何通过 .NET Core API 获取文件并将其保存为文件。

例如:我使用以下方法上传我的测试文件:

private void Button_Click(object sender, RoutedEventArgs e) {
        var client = new RestSharp.RestClient("https://localhost:44356/api/");

        var request = new RestSharp.RestRequest("Upload", RestSharp.Method.POST);
        request.AddFile(
            "test",
            "c:\\kill\\test.wav");

        client.Execute(request);
    }
Run Code Online (Sandbox Code Playgroud)

我的 API 收到一个请求。这个方法看起来像这样:

[HttpPost]
    public IActionResult UploadFile() {
        using(var reader = new StreamReader(Request.Body)) {
            var body = reader.ReadToEnd();
        }
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我的 body 变量包含以下内容:

-------------------------------28947758029299 内容处置:表单数据;名称=“测试”;filename="test.wav" 内容类型:application/octet-stream RIFF^b

现在我的问题是:

如何获取该文件并将其保存在我的光盘上?

我在我的客户端 Restsharp 版本 106.3.1 上使用 .NET Core 2.1 Webapi 。

Chr*_*att 5

首先,您需要确定要如何发送文件,即编码类型。这决定了如何解释请求正文。如果您想使用multipart/form-data,那么您的操作签名需要如下所示:

public IActionResult UploadFile(IFormFile test) { // since you made the key "test"
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下任一方式获取实际的文件数据:

byte[] bytes;
using (var ms = new MemoryStream())
{
    await test.CopyToAsync(ms);
    bytes = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想直接使用流:

using (var stream = test.OpenReadStream())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)