Как передать значения модели в URL WebApi? - PullRequest
1 голос
/ 15 октября 2019

Мне нужно передать модель представления в Web API, я пытался преобразовать модель представления в формат Json и строку запроса, но она не работает.

У меня есть следующая модель:

    public class User
        {
            public int UserId { get; set; }
public string UserName { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string Email { get; set; }
        }

и ниже Модель просмотра:

public class UserUpdateViewModel
    {
        public User User { get; set; }
        public bool MsjError { get; set; }
        public string FormStatus { get; set; }
    }

и ниже Получите метод получения пользовательских данных:

[HttpGet]
        public async Task<IActionResult> Edit(int UserId)
        {
            UserUpdateViewModel vmUserUpdate = new UserUpdateViewModel();

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(WebApiBaseUrl);
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var parameterToAdd = new Dictionary<string, string> { { "UserId", UserId.ToString() } };
                var webApiBaseUrlFull = QueryHelpers.AddQueryString(client.BaseAddress.ToString() + "User/GetUserById/UserId", parameterToAdd);
                HttpResponseMessage result = await client.GetAsync(webApiBaseUrlFull);

                if (result.IsSuccessStatusCode)
                {
                    var response = result.Content.ReadAsStringAsync().Result;

                    if (string.IsNullOrEmpty(response))
                    {
                        vmUserUpdate.MsjError = true;
                        return RedirectToAction("NotFound", "Error");
                    }
                    else
                    {
                        vmUserUpdate.User = JsonConvert.DeserializeObject<User>(response);
                        vmUserUpdate.MsjError = false;
                    }
                }
            }
            return View(vmUserUpdate);
        }

Метод Обновление пользователя:

[HttpPost]
        public async Task<IActionResult> Edit(UserUpdateViewModel vmUserUpdate)
        {
            if (!ModelState.IsValid)
            {
                vmUserUpdate.FormStatus = "Error";
                return View(vmUserUpdate);
            }

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(WebApiBaseUrl);
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                //How to pass model to Web Api?
                var parameterToAdd = new Dictionary<string, string> { { "User", vmUserUpdate.User.ToString() } };
                var webApiBaseUrlFull = QueryHelpers.AddQueryString(client.BaseAddress.ToString() + "User/UserUpdate", parameterToAdd);
                HttpResponseMessage result = await client.GetAsync(webApiBaseUrlFull);

                if (result.IsSuccessStatusCode)
                {
                    var response = result.Content.ReadAsStringAsync().Result;

                    if (string.IsNullOrEmpty(response))
                    {
                        vmUserUpdate.MsjError = true;
                        return RedirectToAction("NotFound", "Error");
                    }
                    else
                    {
                        vmUserUpdate.User = JsonConvert.DeserializeObject<User>(response);
                        vmUserUpdate.MsjError = false;
                    }
                }
            }
            return RedirectToAction("List","User");

и метод веб-API:

[HttpPut(Name = "UserUpdate")]
        public async Task<IActionResult> UserUpdate(User user)
        {
            await _userRepository.UserUpdate(user);
            return CreatedAtAction(nameof(GetUserById), new { UserId = user.UserId }, user);
        }

как я могу передать UserUpdateViewModel vmUserUpdate.User в веб-API:

спасибо и с уважением,

1 Ответ

0 голосов
/ 15 октября 2019

просто верните модель с кодом состояния OK, например return Ok(response);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...