ASP.NET Core MVC:如何获取原始JSON绑定到没有类型的字符串?
与这个有关以前的ASP.NET版本的老问题类似,我想获取要绑定到字符串的HTTP
POST的请求正文。似乎方法绑定了,但是value
当ASP.NET调用我的控制器方法时为null:
namespace Demo.Controllers{
[Route("[controller]")]
public class WebApiDemoController : Controller
{
...
// POST api/values
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]string value)
{
// expected: value = json string, actual: json = null.
}
我还需要从溪流中抢走尸体吗?还是应该这样做?在测试上述方法时,我使用了以下http标头:
Accept: Application/jsonContent-Type: Application/json;charset=UTF-8
我在正文中传递了以下内容: { "a": 1 }
我不想绑定到名为a的字符串变量。我想绑定我得到的所有JSON,然后我想从我的方法中使用JSON内容,任何随意的内容。
如果我了解文档,则该[FromBody]
属性应该已经完成了我想要的工作,但是我猜测ASP.NET核心MVC绑定机制不会将json绑定到“字符串值”,但是也许我可以做一些其他的事情给了我同等的灵活性。
这里有一个类似的问题使我想到,也许我应该写[FromBody] dynamic data
而不是使用[FromBody]
string value。
更新:在进行此操作之前,应考虑这种技巧,因为如果您希望.net核心框架为您处理JSON和XML编码,那么您只是扼杀了该功能。某些类型的REST服务器可能并且经常确实需要支持XML和JSON内容类型,至少我遇到的具有标准文档的类型。
回答:
以下内容适用于.net core 1.x,但不适用于.net core2.x。
正如我所评论的,解决方案是[FromBody]dynamic
data使用dynamic
而不是作为参数列表,string
我将收到JObject
。
警告:
如果您的体系结构要求一台WebApi服务器在流产XML和JSON方面同样流利,这取决于内容类型标头条目,则这种直接JSON消费策略会适得其反。(只要有足够的工作就可以在同一服务上同时支持XML和JSON,但是随后您将把MVC资产管道中的内容进一步提升并将其下移到控制器方法中,这与MVC的精神背道而驰。
,其中已经解析了POCO的模型出现在您的面前。)
一旦在方法内部转换为字符串,JObject
就将传入(JSON的内存数据类型为Newtonsoft.JSON)转换为字符串。
在这里找到其他答案。
示例代码,感谢Jeson Martajaya:
具有动态:
[HttpPost]public System.Net.Http.HttpResponseMessage Post([FromBody]dynamic value)
{
//...
}
使用JObject的示例代码:
[HttpPost]public System.Net.Http.HttpResponseMessage Post([FromBody]Newtonsoft.Json.Linq.JObject value)
{
//...
}
以上是 ASP.NET Core MVC:如何获取原始JSON绑定到没有类型的字符串? 的全部内容, 来源链接: utcz.com/qa/423446.html