Como configurar um controlador webapi para multipart / form-data

Estou tentando descobrir como fazer isso. Eu não estava recebendo nenhuma mensagem de erro útil com meu código, então usei outra coisa para gerar alguma coisa. Anexei esse código após a mensagem de erro. Eu encontrei umtutorial nele, mas não sei como implementá-lo com o que tenho. Isto é o que eu tenho atualmente

public async Task<object> PostFile()
    {
        if (!Request.Content.IsMimeMultipartContent())
            throw new Exception();


        var provider = new MultipartMemoryStreamProvider();
        var result = new { file = new List<object>() };
        var item = new File();

        item.CompanyName = HttpContext.Current.Request.Form["companyName"];
        item.FileDate = HttpContext.Current.Request.Form["fileDate"];
        item.FileLocation = HttpContext.Current.Request.Form["fileLocation"];
        item.FilePlant = HttpContext.Current.Request.Form["filePlant"];
        item.FileTerm = HttpContext.Current.Request.Form["fileTerm"];
        item.FileType = HttpContext.Current.Request.Form["fileType"];

        var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
        var user = manager.FindById(User.Identity.GetUserId());

        item.FileUploadedBy = user.Name;
        item.FileUploadDate = DateTime.Now;

        await Request.Content.ReadAsMultipartAsync(provider)
         .ContinueWith(async (a) =>
         {
             foreach (var file in provider.Contents)
             {
                 if (file.Headers.ContentLength > 1000)
                 {
                     var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
                     var contentType = file.Headers.ContentType.ToString();
                     await file.ReadAsByteArrayAsync().ContinueWith(b => { item.FilePdf = b.Result; });
                 }


             }


         }).Unwrap();

        db.Files.Add(item);
        db.SaveChanges();
        return result;

    }

erro

Object {message: "O tipo de mídia da entidade solicitada 'multipart / form-data' não é suportado para este recurso.", ExceptionMessage: "Nenhum MediaTypeFormatter está disponível para ler um objeto ... ou conteúdo com o tipo de mídia 'multipart / form-data' . ", exceptionType:" System.Net.Http.UnsupportedMediaTypeException ", stackTrace:" at System.Net.Http.HttpContentExtensions.ReadAs… atterLogger, CancellationToken cancellationToken) "} exceptionMessage:" Nenhum MediaTypeFormatter está disponível para ler um objeto do tipo ' HttpPostedFileBase 'do conteúdo com o tipo de mídia' multipart / form-data '. "ExceptionType:" System.Net.Http.UnsupportedMediaTypeException "message:" O tipo de mídia da entidade solicitada' multipart / form-data 'não é suportado por este recurso. " stackTrace: "em System.Net.Http.HttpContentExtensions.ReadAsAsync [T] (conteúdo do HttpContent, tipo de tipo, IEnumerable1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken) ↵ at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable1 formatadores, IFormatterLogger formatterLogger, CancellationToken cancelamentoToken)

Código usado para gerar mensagem de erro

    [HttpPost]
    public string UploadFile(HttpPostedFileBase file)
    {

        if (file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            var path = Path.Combine(HttpContext.Current.Server.MapPath("~/uploads"), fileName);
            file.SaveAs(path);


        }
        return "/uploads/" + file.FileName;
    }

classe

public class File
{
    public int FileId { get; set; }
    public string FileType { get; set; }
    public string FileDate { get; set; }
    public byte[] FilePdf { get; set; }
    public string FileLocation { get; set; }
    public string FilePlant { get; set; }
    public string FileTerm { get; set; }
    public DateTime? FileUploadDate { get; set; }
    public string FileUploadedBy { get; set; }

    public string CompanyName { get; set; }
    public virtual ApplicationUser User { get; set; }
}

questionAnswers(6)

yourAnswerToTheQuestion