GenericResult(IHttpActionResult).txt.txt
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);
        }
    }
}