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);
}
}
}