public async Task <HttpResponseMessage> TranslateToUseCaseScenario() { if (Request.Content.IsMimeMultipartContent() == false) { return(new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType)); } var workingPath = string.Empty; try { workingPath = CreateWorkingDirectory(); var provider = new MultipartFormDataStreamProvider(workingPath); await Request.Content.ReadAsMultipartAsync(provider); var attachmentsProvider = new AttachmentsProvider(provider); var phrases = attachmentsProvider.Validate(); if (phrases.Any()) { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = string.Join(Environment.NewLine, phrases) }); } UseCaseCatalog catalog; using (var reader = new StreamReader(attachmentsProvider.CatalogFileName)) { catalog = new UseCaseReader(workingPath).ReadFrom(reader, attachmentsProvider.CatalogFileName, DateTime.Now); MarkdownConverter.CreateConvertedMarkdownTo(catalog, workingPath); } return(new HttpResponseMessage(HttpStatusCode.OK) { Content = CreateUseCaseScenarioResponseContent(workingPath, provider.Contents[0].Headers.ContentDisposition.FileName, catalog), }); } catch (ApplicationException e) { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = e.Message }); } finally { try { if (Directory.Exists(workingPath)) { Directory.Delete(workingPath); } } catch { // Do nothing. } } }