using System.Net.Http; using System.Threading; using System.Threading.Tasks; using System.Web.Http; using System.Net; using System; using System.IO; namespace Cargo.APITester.Models { public class GenericResult<T> : IHttpActionResult where T : class { T _value; HttpRequestMessage _request; public GenericResult(T value, HttpRequestMessage request) { _value = value; _request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var response = _request.CreateResponse(HttpStatusCode.OK, _value); return Task.FromResult(response); } } public class GenericResult : IHttpActionResult { object _value; HttpRequestMessage _request; public GenericResult(object value, HttpRequestMessage request) { _value = value; _request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var result = _request.GetConfiguration() .Services.GetContentNegotiator() .Negotiate(_value.GetType(), _request, _request.GetConfiguration().Formatters); if (result == null) { var response = new HttpResponseMessage(HttpStatusCode.NotAcceptable); throw new HttpResponseException(response); } var resp = new HttpResponseMessage() { Content = new ObjectContent(_value.GetType(), _value, result.Formatter, result.MediaType.MediaType), StatusCode = HttpStatusCode.OK }; return Task.FromResult(resp); } } public class FileResult : IHttpActionResult { string _value; HttpRequestMessage _request; public FileResult(string filePath, HttpRequestMessage request) { _value = filePath; _request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { FileInfo info = new FileInfo(_value); byte[] file = File.ReadAllBytes(_value); var result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new ByteArrayContent(file); result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = info.Name, CreationDate = info.CreationTime, Size = file.Length, Name = info.Name, ModificationDate = info.LastWriteTime }; result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-steam"); return Task.FromResult(result); } } }