Мне нужно передать модель представления в 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:
спасибо и с уважением,