Zastanawiałem się, czy istnieje prosty sposób na pobranie pliku w bardziej… „ogólny” sposób. Wymyśliłem to.
Jest to proste ActionResult, które pozwoli ci pobrać plik z wywołania kontrolera, które zwraca plik IHttpActionResult. Plik jest przechowywany w formacie byte[] Content. W razie potrzeby możesz przekształcić go w strumień.
Użyłem tego do zwrócenia plików przechowywanych w kolumnie varbinary bazy danych.
public class FileHttpActionResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string FileName { get; set; }
public string MediaType { get; set; }
public HttpStatusCode StatusCode { get; set; }
public byte[] Content { get; set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage(StatusCode);
response.StatusCode = StatusCode;
response.Content = new StreamContent(new MemoryStream(Content));
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = FileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue(MediaType);
return Task.FromResult(response);
}
}