簡體   English   中英

IFormFile 在 dotnet core 2.0 上總是返回 Null 值

[英]IFormFile always returns Null value on dotnet core 2.0

我有我的PhotosController類的發布請求。 當我測試這段代碼時,它總是返回一個空值。 我沒有看到文件詳細信息。 基本上它獲取useridPhotoDto ,它應該返回照片。 我使用Cloudinary服務來存儲照片。 我的 clodinary 的 API 設置位於appsettings.json文件中,這些設置沒有問題。 當我調試代碼時,問題出現在if (file.Length > 0)所在的位置。 我猜沒有文件。

這是我的PhotoForCreationDto文件:

public class PhotoForCreationDto
{
    public string Url { get; set; }
    public IFormFile File { get; set; }
    public string Description { get; set; }
    public DateTime DateAdded { get; set; }
    public string PublicId { get; set; }

    public PhotoForCreationDto()
    {
        DateAdded = DateTime.Now;
    }
}

這是我的PhotosController文件:

    [Authorize]
[Route("api/users/{userId}/photos")]
public class PhotosController : Controller
{
    private readonly IDatingRepository _repo;
    private readonly IMapper _mapper;
    private readonly IOptions<CloudinarySettings> _cloudinaryConfig;
    private Cloudinary _cloudinary;

    public PhotosController(IDatingRepository repo,
        IMapper mapper,
        IOptions<CloudinarySettings> cloudinaryConfig)
    {
        _mapper = mapper;
        _repo = repo;
        _cloudinaryConfig = cloudinaryConfig;

        Account acc = new Account(
            _cloudinaryConfig.Value.CloudName,
            _cloudinaryConfig.Value.ApiKey,
            _cloudinaryConfig.Value.ApiSecret
        );

        _cloudinary = new Cloudinary(acc);
    }

    [HttpGet("{id}", Name = "GetPhoto")]
    public async Task<IActionResult> GetPhoto(int id)
    {
        var photoFromRepo = await _repo.GetPhoto(id);

        var photo = _mapper.Map<PhotoForReturnDto>(photoFromRepo);

        return Ok(photo);
    }

    [HttpPost]
    public async Task<IActionResult> AddPhotoForUser(int userId, PhotoForCreationDto photoDto)
    {
        var user = await _repo.GetUser(userId);

        if (user == null)
            return BadRequest("Could not find user");

        var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

        if (currentUserId != user.Id)
            return Unauthorized();

        var file = photoDto.File;

        var uploadResult = new ImageUploadResult();

        if (file.Length > 0)
        {
            using (var stream = file.OpenReadStream())
            {
                var uploadParams = new ImageUploadParams()
                {
                    File = new FileDescription(file.Name, stream)
                };

                uploadResult = _cloudinary.Upload(uploadParams);
            }
        }

        photoDto.Url = uploadResult.Uri.ToString();
        photoDto.PublicId = uploadResult.PublicId;

        var photo = _mapper.Map<Photo>(photoDto);

        photo.User = user;

        if (!user.Photos.Any(m => m.IsMain))
            photo.IsMain = true;

        user.Photos.Add(photo);



        if (await _repo.SaveAll())
        {
            var photoToReturn = _mapper.Map<PhotoForReturnDto>(photo);
            return CreatedAtRoute("GetPhoto", new { id = photo.Id }, photoToReturn);
        }

        return BadRequest("Could not add the photo");
    }
}

這是郵遞員的錯誤:

在此處輸入圖片說明 我嘗試使用[FromBody]但它也不起作用。 我會appriciate任何幫助。

從 Postman 提交文件時,請確保不要自己填寫Content-Type標題。 Postman 會自動將其設置為multipart/form-data值。

Content-Type標頭設置為application/json阻止 ASP.Net Core 正確處理請求數據。 這就是為什么IFormFile屬性未填充並設置為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM