1

我有以下发布功能,它基本上只需要一个多部分发布(fileDataModel.File 是一个 IFormFile 对象)并将文件元数据保存到数据库并将文件保存到硬盘驱动器。

    [HttpPost("filedata")]
    public async Task<IActionResult> PostFileData([FromForm] FileDataBindingModel fileDataModel)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }           

        var contactData = await _context.ContactData.FirstOrDefaultAsync(e => e.Id == fileDataModel.ContactId);
        if (contactData == null)
        {
            ModelState.AddModelError("ContactId", "No such contact exists.");
            return BadRequest(ModelState);
        }

        FileData fileData = new FileData
        {
            ContactId = fileDataModel.ContactId,
            Contact = contactData
        };

        var fileName = fileDataModel.File.FileName;

        var FileStorageDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "filestorage");
        Directory.CreateDirectory(FileStorageDir);
        var FileStoragePath = FileStorageDir + "\\" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + fileName;
        using (FileStream fStream = new FileStream(FileStoragePath, FileMode.OpenOrCreate)) {
            await fileDataModel.File.CopyToAsync(fStream);
        }
        fileData.FilePath = FileStoragePath;
        fileData.OriginalFileName = fileName;
        fileData.Id = Guid.NewGuid();

        _context.FileData.Add(fileData);
        await _context.SaveChangesAsync();

        return Ok(fileData);
    }        

现在这个函数工作正常,做它应该做的,但是如果 Ok() 中的返回对象在某些时候被 EF 触及(特别是 fileData 和 contactData),则无法返回。邮递员报告未收到任何回复。如果我输入任何其他对象,它会返回该对象就好了。我似乎找不到障碍,因为我没有得到任何异常或任何东西,只是未能返回。任何帮助将不胜感激。

4

1 回答 1

0

也许尝试使用非异步版本对其进行测试,看看它是否会返回错误?

于 2017-10-19T22:39:09.087 回答