У меня есть следующий API, который работает правильно
[HttpPost("testing")]
public string Testing(IFormFile file, string str, int num)
{
return str + num.ToString();
}
В идеале я хочу передать «str» и «num» в объект вместо каждого параметра по отдельности.
Так:
public class Testdto
{
public int Num{ get; set; }
public string Str { get; set; }
}
[HttpPost("testing")]
public string Testing(IFormFile file, Testdto dto)
{
return dto.Str + dto.Num.ToString();
}
Конечно, приведенный выше формат выдает ошибку, он не работает.
Есть ли способ заставить его работать? Мое реальное тело API довольно велико и содержит вложенные объекты, поэтому я не могу просто передать их все как параметры в API.
добавьте атрибут FromForm:
[HttpPost("testing")]
public string Testing(IFormFile file, [FromForm]testdto dto)
{
return dto.str + dto.num.ToString();
}
И добавьте параметры в форму запроса
Результат:
Вы также можете создать класс, имеющий такие свойства, как IFormFile и другие поля.
И передайте его вашему контроллеру с атрибутом [FromForm]
Образец кода:
[HttpPost]
[Route("FileUpload")]
public ActionResult FileUploaded([FromForm] PostRequest postRequest)
{
return Ok(postRequest.str);
}
public class PostRequest
{
public int Num { get; set; }
public string Str { get; set; }
public IFormFile File { get; set; }
}