Этот вопрос немного похож на этот , и я использовал большинство принятых решений, включая предложенный ResponseTypeFilter.
В частности, мой контроллер Swagger выглядит следующим образом:
[SwaggerFileResponse(HttpStatusCode.OK, "File Response")]
[System.Web.Http.HttpGet]
public void GetFileFromDownloadURL(string r_object_id = null)
{ //Task<Microsoft.Rest.HttpOperationResponse<System.IO.Stream>>?
try
{
DocumentumDownloadFile file = new DocumentumDownloadFile();
string[] r_object_ids = r_object_id.Split(',');
foreach (string id in r_object_ids)
{
string topUrl = "..." + id.Trim() + "/download-url";
ApiCall documentumCall = new ApiCall();
IRestResponse response = documentumCall.ApiCaller(topUrl, false);
JObject jsonres = JObject.Parse(response.Content);
JArray array = (JArray)jsonres["entries"];
string[] stringSeparators = new string[] {"D2"};
string actual_download_url = "/D2" + array[0]["content"]["url"].ToString().Split(stringSeparators, StringSplitOptions.None)[1];
ApiCall documentumCall2 = new ApiCall();
IRestResponse downloadResponse = documentumCall2.ApiCaller(actual_download_url, true);
File.WriteAllBytes("C:\temp\temp.pdf", downloadResponse.RawBytes);
}
}
catch (Exception e)
{
throw new HttpResponseException(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "An Error has occured, try again or contact the administrator"));
}
Однако мой код завершается ошибкой в последнем File.WriteAllbyte, поскольку downloadResponse.RawBytes имеет значение null. Это озадачивает меня, потому что, если я запускаю тот же URL-адрес загрузки в Postman и «сохраняет как файл», файл сохраняется как ожидалось. Ответ также выглядит хорошо - рассматриваемый файл найден, он просто не передан в downloadUrl-response.
Итак, я думаю, что я делаю что-то неправильно в моем методе ApiCaller, который выглядит следующим образом:
public IRestResponse ApiCaller(string topUrl, bool download)
{
string url = "..." + topUrl;
var client = new RestClient(url)
{
Authenticator = new HttpBasicAuthenticator("...", "..")
};
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "application/json");
if (download)
{
//var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
//client.DownloadData(request).SaveAs("C:\temp\temp.pdf");
//var response = client.DownloadData(request);
var tempFile = Path.GetTempFileName();
var stream = File.Create(tempFile, 1024, FileOptions.DeleteOnClose);
request.ResponseWriter = responseStream => responseStream.CopyTo(stream);
return client.Execute(request);
}
else
{
var response = client.Execute(request);
return response;
}
}
Если я удаляю File.WriteAllbyte в моем контроллере, я не получаю ошибок, а только тело ответа, состоящее только из " [объект Blob] "и код ответа 204. Нет содержимого.
Я благодарен за любую пу sh в правильном направлении! Благодаря.