将嵌套的 x-form-urlencoded 数据映射到 Asp.NET Core 中的 DTO
Mapping nested x-form-urlencoded data to DTO in Asp.NET Core
在 Asp.Net 核心中实现一个 webhook,该核心 POST 使用 application/x-form-urlencoded
数据进行编辑 - 它正在以一种设计为易于在 [=36= 中处理的格式接收数据] w/ $_POST
变量(嵌套关联数组)- 表单字段看起来像
foo
bar[barf]
baz[bat][bark]
baz[bat][bant]
是否有一个很好的(优雅且需要很少的代码)方法来连接 Asp.NET 核心模型绑定以处理此处的嵌套结构?即当 webhook 被 POSTed 时,我们解析 C# POCO -
类似
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;}
}
}
}
POST 正文如下所示:
foo=somevalue&bar%5Bbarf%5D=anothervalue&baz%5Bbat%5D%5Bbark%5D=123.0&baz%5Bbat%5D%5Bbant%5D=5000
即
foo=somevalue&bar[barf]=anothervalue&baz[bat][bark]=123.0&baz[bat][bant]=5000
此外,为这些字段之一设置类型转换器的低摩擦方法是什么(例如,假设字段 "Foo" 作为字符串出现,但我们想将其解析为结构) ?
请注意,我无法控制来自 webhook 的数据的形状或编码(例如,我不能请求他们直接发送给我 JSON)。
请求正文
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);
}
顺便说一句,你的根 class 似乎是错误的我已经更改以使其工作
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;}
}
}
}
在 Asp.Net 核心中实现一个 webhook,该核心 POST 使用 application/x-form-urlencoded
数据进行编辑 - 它正在以一种设计为易于在 [=36= 中处理的格式接收数据] w/ $_POST
变量(嵌套关联数组)- 表单字段看起来像
foo
bar[barf]
baz[bat][bark]
baz[bat][bant]
是否有一个很好的(优雅且需要很少的代码)方法来连接 Asp.NET 核心模型绑定以处理此处的嵌套结构?即当 webhook 被 POSTed 时,我们解析 C# POCO -
类似
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;}
}
}
}
POST 正文如下所示:
foo=somevalue&bar%5Bbarf%5D=anothervalue&baz%5Bbat%5D%5Bbark%5D=123.0&baz%5Bbat%5D%5Bbant%5D=5000
即
foo=somevalue&bar[barf]=anothervalue&baz[bat][bark]=123.0&baz[bat][bant]=5000
此外,为这些字段之一设置类型转换器的低摩擦方法是什么(例如,假设字段 "Foo" 作为字符串出现,但我们想将其解析为结构) ?
请注意,我无法控制来自 webhook 的数据的形状或编码(例如,我不能请求他们直接发送给我 JSON)。
请求正文
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);
}
顺便说一句,你的根 class 似乎是错误的我已经更改以使其工作
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;}
}
}
}