Try using a simple HttpResponseMessage, with a StreamContent inside to GET, download file
public HttpResponseMessage Get()
{
    var path = @"C:\Temp\file.zip";
    var result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType = 
        new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                            {
                                FileName = "file.zip"
                            };
    return result;
}
and for POST, upload file
public Task<HttpResponseMessage> Post()
{
    HttpRequestMessage request = this.Request;
    if (!request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }
    var provider = new MultipartFormDataStreamProvider("C:\Temp");
    var task = request.Content.ReadAsMultipartAsync(provider).
        ContinueWith<HttpResponseMessage>(o =>
        {
            string file1 = provider.BodyPartFileNames.First().Value;
            // this is the file name on the server where the file was saved 
            return new HttpResponseMessage()
            {
                Content = new StringContent("File uploaded.")
            };
        }
    );
    return task;
}