Веб-API ASP.NET MVC 5 не принимает View Model on POST из решения MVC ASP.NET Core - PullRequest
1 голос
/ 12 апреля 2019

У меня есть два решения: одно - веб-приложение MVC5, а другое - веб-приложение MVC core 2.2, которое выступает в качестве базовой веб-формы.

Я пытаюсь опубликовать данные веб-формы (используя ViewModel) в API веб-приложения MVC5.

Код

Метод POST в веб-приложении MVC5 / api

// POST
[HttpPost]
public IHttpActionResult Post([FromBody] WebFormDataVM personData)
{
    // logic here
}

Основная веб-форма MVC (публикация выше)

[HttpPost]
public async Task<ActionResult> Create(PersonVM personData)
{
    var path = "api/WebForm/Post";
    var url = new Uri("http://localhost:60291/");
    var client = new HttpClient();
    client.BaseAddress = url;

    var response = await client.PostAsJsonAsync(path, personData);

    return RedirectToAction("Index");
}

Выпуск

При публикации viewmodel параметр API метода POST (WebformDataVM personData) всегда равен null.

Я попробовал точно такую ​​же настройку, но использую проект / решение MVC5 вместо ядра, и он работает без сбоев.

Что я пробовал

Отправка строки вместо представления модели объекта
Удаление HTTPS из основного проекта .net (через параметры проекта)

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

вы должны преобразовать свой объект в json

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var url ="yourUrl" // http://localhost:60291/api/WebForm/Post
            var model=yourObject; //PersonVM  
            HttpResponseMessage response = await client.PostAsync(url, new StringContent(JsonConvert.SerializeObject(yourObject),Encoding.UTF8, "application/json"));

        }
0 голосов
/ 12 апреля 2019

Пожалуйста, попробуйте с этим решением

[HttpPost]
public async Task<ActionResult> Create(PersonVM personData)
{
 using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:60291/api/WebForm/Post");

                var response = await client.PostAsJsonAsync("personData", personData);
                return RedirectToAction("Index");

            }

}



   [HttpPost]
    public IHttpActionResult  Post(WebFormDataVM personData)
        {
           // code
        }
...