在使用application/x-form-urlencoded
数据发布的Asp.Net Core中实现webhook - 它以一种格式设计为可以在PHP中轻松处理的格式{/ 1}}变量(嵌套关联数组) - 表单字段看起来像
$_POST
是否有一个很好的(优雅的,需要很少的代码)方法来连接Asp.NET Core模型绑定来处理嵌套结构?即当webhook被发布时,我们解析一个C#POCO -
类似
foo
bar[barf]
baz[bat][bark]
baz[bat][bant]
POST正文如下所示:
class RootDto {
public string Foo {get; set;}
public Bar Bar {get; set;}
public Baz Baz {get; set;}
public class Bar {
public string Barf {get; set;}
}
public class Baz {
public Bat Bat {get; set;}
public class Bat {
public string Bark {get; set;}
public string Bant {get; set;}
}
}
}
即
foo=somevalue&bar%5Bbarf%5D=anothervalue&baz%5Bbat%5D%5Bbark%5D=123.0&baz%5Bbat%5D%5Bbant%5D=5000
此外,为这些字段之一设置类型转换器的低摩擦方式是什么(例如假设字段" Foo"以字符串形式出现,但我们要解析它成为一个结构)?
请注意,我无法控制来自webhook的数据的形状或编码(例如,我无法请求他们向我发送JSON)。
答案 0 :(得分:3)
请求正文
Content-Type: application/x-www-form-urlencoded
foo=somevalue&bar%5Bbarf%5D=anothervalue&baz%5Bbat%5D%5Bbark%5D=123.0&baz%5Bbat%5D%5Bbant%5D=5000
它只是工作....我有简单的.net核心项目和控制器看起来像
public IActionResult Post([FromForm] RootDto request)
{
return Ok(request);
}
顺便说一下你的根类似乎是错的我已经改变了以使它工作
public class RootDto {
public string Foo {get; set;}
public BarClass Bar {get; set;}
public BazClass Baz {get; set;}
public class BarClass {
public string Barf {get; set;}
}
public class BazClass {
public BatClass Bat {get; set;}
public class BatClass {
public string Bark {get; set;}
public string Bant {get; set;}
}
}
}