dotnet core中httpclient的post响应400

Response 400 on the post of httpclient in dotnet core

我已将代码从我的网络应用程序写入 POST,但它发送了 400 个错误请求。 查看我的控制器 class:

[HttpPost]
        public async Task<IActionResult> CreateAgent(AgentCreateDto agentCreateDto)
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44331/api/");
                var responseTask = client.PostAsJsonAsync("Agent/CreateAgent", agentCreateDto);
                responseTask.Wait();

                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    var newAgentAdd = JsonConvert.DeserializeObject<AgentCreateDto>(await result.Content.ReadAsStringAsync());
                    var newAgent = newAgentAdd;
                    TempData["SuccessMessage"] = $"Agent {newAgent.FirstName} was successfully created.";
                    return RedirectToAction("AgentLists");
                    //return RedirectToAction("GetAgentById", new { AgentId = newAgent.usersId});
                }
            }
            return View();
        } 

问题图片如下,请参考。

这是我发送请求的 api 代码:

[HttpPost("CreateAgent")]
        public async Task<IActionResult> CreateAgent([FromForm]AgentCreateDto agentCreateDto)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest("Invalid model object");
            }
           
                if (agentCreateDto.ProfileImage != null)
                {
                    string uniqueFileName = UploadProfileImage(agentCreateDto.ProfileImage);
                    agentCreateDto.ProfileNewImage = uniqueFileName;
                }
                var createAgent = await _userService.CreateAgent(agentCreateDto);
                //_logger.LogInformation($"User added to the for file test. ");
                return Created("", new
                {
                    Id = createAgent.UsersId,
                    Message = "Agent created Successfully",
                    Status = "Success",
                    UserType = createAgent.UserType
                });
        }

API端的图片上传代码:

private string UploadProfileImage(IFormFile ProfileImage)
        {
            string uniqueFileName = null;
            if (ProfileImage != null)
            {
                string uploadsFolder = Path.Combine(_webHostEnvironment.ContentRootPath, "ProfileImage");
                uniqueFileName = Guid.NewGuid().ToString() + "_" + ProfileImage.FileName;
                string filePath = Path.Combine(uploadsFolder, uniqueFileName);
                using (var fileStream = new FileStream(filePath, FileMode.Create))
                {
                    ProfileImage.CopyTo(fileStream);
                }
            }
            return uniqueFileName;
        }

通过 HttpClient 获取 post 文件和附加数据的正确方法如下:

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://localhost:44331/api/");
    var formContent = new MultipartFormDataContent();
    formContent.Add(new StringContent(agentCreateDto.Id.ToString()), nameof(agentCreateDto.Id));
    formContent.Add(new StringContent(agentCreateDto.Message), nameof(agentCreateDto.Message));
    formContent.Add(new StringContent(agentCreateDto.UserType), nameof(agentCreateDto.UserType));
    //other proerties....
    formContent.Add(new StreamContent(agentCreateDto.ProfileImage.OpenReadStream()), nameof(agentCreateDto.ProfileImage), Path.GetFileName(agentCreateDto.ProfileImage.FileName));

    //change PostAsJsonAsync to PostAsync.....
    var responseTask = client.PostAsync("/Agent/CreateAgent", formContent);
    responseTask.Wait();

    var result = responseTask.Result;
    //more code...
}