如何让 ASP.NET Core 绑定到简单数据类型

问题描述 投票:0回答:1

我正在将中型 .NET 4、ASP.NET MVC(旧)应用程序迁移到 .NET 7、ASP.NET Core MVC(新)。

我有很多带有操作方法的控制器,这些方法使用简单类型进行数据绑定。

public class HomeController : Controller
{
    ...

    public ActionResult Foo(string bar)
    {
        return Content(bar);
    }

    ...
    }
}

对于旧的 ASP.NET MVC,我可以使用 (

content-type: application/json; charset=utf-8
) 像这样 POST JSON:

{ "bar": "BAZ" }   

它将正确绑定到方法参数并按我的预期返回 BAZ。

如果我尝试在 ASP.NET Core MVC 下运行相同的控制器,则

bar
参数始终为 null。我尝试添加
[HttpPost]
[FromBody]
但似乎唯一有效的方法是创建一个以字符串 bar 作为属性的复杂类型并添加
[FromBody]
。我还尝试用
[ApiControllerAttribute]
装饰控制器。

遍历所有控制器并在需要的地方添加复杂类型是我宁愿避免的事情,因为这将是一项相当大的任务,而且我也不喜欢创建大量“无用”类型的想法。

有没有办法像旧版本一样以简单类型的形式访问 JSON 输入的一部分?

c# json asp.net-mvc data-binding asp.net-core-7.0
1个回答
0
投票

你的问题根本不明确。您想发布什么类型的数据?您是从表单发布数据还是使用 javascript 或者 httpclient ?为了帮助您,我们需要您用来调用控制器操作的代码。例如,我不明白为什么需要 POST json,只是为了发送一个字符串。您可以使用其他内容形式。但是如果你确实需要 json 并且由于某种原因不想创建特殊的类,最简单的方法是

 public ActionResult Foo([FromBody]Dictionary<string,string> dict)
  {
      return Content(dict["bar"]);
  }
© www.soinside.com 2019 - 2024. All rights reserved.