. NET Проблема привязки параметров основного веб-API [FromForm] и [FromBody] - PullRequest
0 голосов
/ 06 марта 2020
public async Task<IActionResult> Register([FromForm] RegisterViewModel model)
{

}

Это действие веб-контроллера, и я передаю ему модель из другого простого контроллера:

HttpResponseMessage response = await client.PostAsJsonAsync("api/Account/Register", model);

Проблема заключается в том, что модель (RegisterViewModel) содержит тип IFormFile поле и чтобы отправить его вместе, я должен использовать [FromForm], но он работает только в том случае, если данные напрямую отправляются из формы в API, но я отправляю форму на простой контроллер и отправляю ее в API с помощью HttpClient, и если я использую [FromBody] принимает все остальные поля, но не принимает IFormFile поле

    public class RegisterViewModel
    {
        [Required]
        [Display(Name = "Email")]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        [Required(ErrorMessage = "Enter First Name:")]
        [StringLength(maximumLength: 30, MinimumLength = 3)]
        [MaxLength(30)]
        [Display(Name = "First Name")]
        public string firstName { get; set; }

        [Required(ErrorMessage = "Enter Last Name:")]
        [StringLength(maximumLength: 30, MinimumLength = 3)]
        [MaxLength(30)]
        [Display(Name = "Last Name")]
        public string lastName { get; set; }

        [Required(ErrorMessage = "Please Select Profile Picture")]
        public IFormFile profilePicture { get; set; }
        public string profilePictureName { get; set; }

        [StringLength(200)]
        [MaxLength(200)]
        [Display(Name = "Add Facebook Link To Your Profile")]
        [DataType(DataType.Url)]
        public string facebookLink { get; set; }

        [StringLength(200)]
        [MaxLength(200)]
        [Display(Name = "Add Instagram Link To Your Profile")]
        [DataType(DataType.Url)]
        public string instagramLink { get; set; }

        [StringLength(200)]
        [MaxLength(200)]
        [Display(Name = "Add Twitter Link To Your Profile")]
        [DataType(DataType.Url)]
        public string twitterLink { get; set; }

        [Required(ErrorMessage = "Enter Date Of Birth:")]
        [DataType(DataType.Date)]
        public DateTime DOB { get; set; }

        [Required]
        [Display(Name = "Registration No")]
        public string season { get; set; }
        [Required]
        public string department { get; set; }
        [Required]
        public string roll { get; set; }

        public IEnumerable<SelectListItem> seasons { get; set; }
        public IEnumerable<SelectListItem> departments { get; set; }
    }

1 Ответ

0 голосов
/ 06 марта 2020

Я наконец нашел способ сделать это. Это можно сделать с помощью RestSharp <3 Simple and easy </p>

var client = new RestClient("https://localhost:44337/api/Account/Register");
var request = new RestRequest(Method.POST);
request.AddParameter("roll", "asdsad");
request.AddFile("profilePicture", "Path To File/T3WsmCaK.jpg");
IRestResponse response = client.Execute(request);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...