【问题标题】:ASP.NET MVC 5 Web API not accepting View Model on POST from MVC ASP.NET Core solutionASP.NET MVC 5 Web API 不接受来自 MVC ASP.NET Core 解决方案的 POST 视图模型
【发布时间】:2019-09-03 05:35:35
【问题描述】:

我有两种解决方案,一种是 MVC5 网络应用程序,另一种是用作基本网络表单的 MVC 核心 2.2 网络应用程序。

我正在尝试将网络表单数据(使用 ViewModel)发布到 MVC5 网络应用 API。

守则

MVC5 web app/api上的POST方法

// 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 时,POST 方法 API 参数 (WebformDataVM personData) 始终为 null

我尝试了完全相同的设置,但使用的是 MVC5 项目/解决方案而不是核心,它可以正常工作。

我的尝试

发布字符串而不是视图模型对象
从 .net 核心项目中删除 HTTPS(通过项目选项)

任何帮助将不胜感激。

【问题讨论】:

  • 您可以捕获您在提琴手(或其他工具)中发送的请求,并将工作请求与失败请求进行比较。它们实际上是一样的吗?
  • 干杯,有趣的是,两个请求都成功了,但是一个没有传递数据(在 POST 方法上显示为 null)而另一个传递了。提琴手似乎反映了这一点......
  • 您可以发布正在发送的 Json 吗?
  • 恐怕在提琴手中看不到 JSON。我可以在 WebForms 选项卡中看到表单值。
  • @bsod_ 你能发布工作请求和不工作请求的原始版本吗?你打电话给PostAsJsonAsync,所以对我来说为什么你没有json数据没有意义......你确定vm在调用它时不为空,并且你在这里发布的代码准确地反映了你有什么?

标签: c# asp.net-mvc asp.net-web-api asp.net-core asp.net-core-mvc


【解决方案1】:

你应该将你的对象序列化为 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"));

        }

【讨论】:

  • 优秀。这很有效,有趣的是,我曾尝试在我的测试中进行序列化,并且只有您展示的方式才有效。仍然不确定为什么它在非核心项目中工作。谢谢
【解决方案2】:

请尝试此解决方案

[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
        }

【讨论】:

  • 感谢您的建议,但我仍然遇到同样的问题 - Post 方法中的 personData 为 null
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多