3

我正在 ASP.NET 样板引擎中开发服务并从主题中获取错误。正如文档所暗示的那样,错误的性质尚不清楚,因为我从 ApplicationService 继承。编码:

namespace MyAbilities.Api.Blob
{
    public class BlobService : ApplicationService, IBlobService
    {
        public readonly IRepository<UserMedia, int> _blobRepository;

        public BlobService(IRepository<UserMedia, int> blobRepository)
        {
            _blobRepository = blobRepository;
        }

        public async Task<List<BlobDto>> UploadBlobs(HttpContent httpContent)
        {
            var blobUploadProvider = new BlobStorageUploadProvider();

            var list = await httpContent.ReadAsMultipartAsync(blobUploadProvider)
                .ContinueWith(task =>
                {
                    if (task.IsFaulted || task.IsCanceled)
                    {
                        if (task.Exception != null) throw task.Exception;
                    }

                    var provider = task.Result;
                    return provider.Uploads.ToList();
                });

            // store blob info in the database

            foreach (var blobDto in list)
            {
                SaveBlobData(blobDto);
            }

            return list;
        }

        public void SaveBlobData(BlobDto blobData)
        {
            UserMedia um = blobData.MapTo<UserMedia>();
            _blobRepository.InsertOrUpdateAndGetId(um);
            CurrentUnitOfWork.SaveChanges();
        }

        public async Task<BlobDto> DownloadBlob(int blobId)
        {
            // TODO: Implement this helper method. It should retrieve blob info
            // from the database, based on the blobId. The record should contain the
            // blobName, which should be returned as the result of this helper method.
            var blobName = GetBlobName(blobId);

            if (!String.IsNullOrEmpty(blobName))
            {
                var container = BlobHelper.GetBlobContainer();
                var blob = container.GetBlockBlobReference(blobName);

                // Download the blob into a memory stream. Notice that we're not putting the memory
                // stream in a using statement. This is because we need the stream to be open for the
                // API controller in order for the file to actually be downloadable. The closing and
                // disposing of the stream is handled by the Web API framework.
                var ms = new MemoryStream();
                await blob.DownloadToStreamAsync(ms);

                // Strip off any folder structure so the file name is just the file name
                var lastPos = blob.Name.LastIndexOf('/');
                var fileName = blob.Name.Substring(lastPos + 1, blob.Name.Length - lastPos - 1);

                // Build and return the download model with the blob stream and its relevant info
                var download = new BlobDto
                {
                    FileName = fileName,
                    FileUrl = Convert.ToString(blob.Uri),
                    FileSizeInBytes = blob.Properties.Length,
                    ContentType = blob.Properties.ContentType
                };

                return download;
            }

            // Otherwise
            return null;
        }


        //Retrieve blob info from the database
        private string GetBlobName(int blobId)
        {
            throw new NotImplementedException();
        }
    }
}

该错误甚至在应用程序流跳转到“SaveBlobData”方法之前就出现了。我错过了什么吗?

4

1 回答 1

0

讨厌回答我自己的问题,但是在这里......过了一会儿,我发现如果 UnitOfWorkManager 由于某种原因不可用,我可以通过在构造函数中初始化 IUnitOfWorkManager 来在代码中实例化它。然后,您可以在 Save 方法中简单地使用以下结构:

    using (var unitOfWork = _unitOfWorkManager.Begin())
    {
        //Save logic...

        unitOfWork.Complete();
    }
于 2017-08-22T20:59:57.227 回答