Проблемы с загрузкой файлов веб-API

Используя MVC 4, я пытаюсь создать контроллер веб-API, в который вы можете загрузить изображение. После завершения загрузки контроллер должен сохранить изображение в базе данных. Вот мой код:

[HttpPost]
public void UploadPhoto(int thirdPartyID)
{            
    if (!Request.Content.IsMimeMultipartContent())
        throw new Exception(); // divided by zero

    byte[] data = null;
    var filename = string.Empty;

    var provider = new MultipartMemoryStreamProvider();
    Request.Content.ReadAsMultipartAsync(provider).ContinueWith(y =>
    {
        foreach (var file in provider.Contents)
        {
            filename = file.Headers.ContentDisposition.FileName.Trim('\"');
            data = file.ReadAsByteArrayAsync().Result;                            
        }

        var image = this.GetImageFrom(data);            
        var member = this.GetMemberBy(thirdPartyID);

        member.ProfileImage = data; 

        this.memberService.Save();                        
    });           
}

Проблема возникает, когда выполняется следующая строка:

this.memberService.Save();

Я использую Ninject и Entity Framework. Когда это выполняется, я получаю сообщение об ошибке: экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения. Я предполагаю, что это происходит из-за того, что «ContinueWith» выполняется асинхронно в другой области запроса, чем то, что мой DI связал с исходным DbContext? Вот мои привязки DI для моего UOW:

kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InScope(x => HttpContext.Current);

Я читал, как изменить DI, чтобы его область действия была привязана к объекту, но это большой проект, и на данном этапе мне неудобно менять корень композиции. У кого-нибудь есть обходной путь, который не включает изменение DI? Я попытался изменить строку

Request.Content.ReadAsMultipartAsync(provider).ContinueWith(y =>...

работать синхронно с

Request.Content.ReadAsMultipartAsync(provider).RunSynchronously();

or

Request.Content.ReadAsMultipartAsync(provider).Wait();

Метод «RunSynchronously» выдает ошибку, метод «Wait()» просто зависает. Мне просто нужно загрузить изображение, а затем сохранить его в базе данных.

РЕДАКТИРОВАТЬ Только что пришло это: Request.Content.ReadAsMultipartAsync никогда не возвращается. Я обновил свой код на основе этого сообщения, и это решило мою проблему!


person jwdenny13    schedule 25.11.2013    source источник
comment
Вы можете проверить stackoverflow .com/questions/19723064/   -  person Ravia    schedule 26.11.2013
comment
Пожалуйста, посмотрите на эти 3 ссылки. Надеюсь, они решат вашу проблему: 1. Блог Хенрика: Asynchronous File Upload using ASP.NET Web API 2. Пример кода: ASP.NET Web API: File Upload and Multipart MIME 3. Хорошее руководство: A guide to asynchronous file uploads in ASP.NET Web API RTM   -  person Iman Mahmoudinasab    schedule 18.01.2014