【发布时间】:2019-04-20 18:17:00
【问题描述】:
我一直在尝试通过调用使用 NancyFx 编写的 API 方法 GetFile() 从我的 Angular 6 应用程序下载文件。
GetFile() API 方法再次使用 RestSharp 调用 Web API 方法 GetRemoteFile()。
GetFile() 方法遵循异步/等待模式。但是我看到文件在 GetRemoteFile() 的成功回调甚至被调用之前就被下载了。
因此下载的文件是 0 字节。
using RestSharp.Extensions.MonoHttp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Linq;
using Nancy.Json;
using RestSharp.Extensions;
using System.Net;
using Nancy;
using Nancy.Responses;
using RestSharp;
private async Task<Nancy.Response> GetFile(int orderId)
{
var request = new RestRequest($"api/GetRemoteFile", Method.POST);
string json = SomeBodyData();
request.AddJsonBody(new RemoteParameter
{
OId = documentId,
Json = json
});
var taskCompletionSource = new TaskCompletionSource<IResponse>();
client.BaseUrl = new Uri("http://someremoteapi.com/orders/");
var res = client.PostAsync(request, (response,handle) =>
{
taskCompletionSource.SetResult(response);
});
var data = await taskCompletionSource.Task;
var stream = new MemoryStream(data.RawBytes);
stream.Position = 0;
var file= new StreamResponse(() => stream, "text/csv");
return file;
}
【问题讨论】:
-
您是否尝试过等待 PostAsync,例如var res = await client.PostAsync(...)
-
是的,我也试过了,但也没用。
标签: asp.net-web-api .net-core async-await restsharp nancy