gpt4 book ai didi

asp.net-core - 将嵌套的 x-form-urlencoded 数据映射到 Asp.NET Core 中的 DTO

转载 作者:行者123 更新时间:2023-12-05 03:06:44 24 4
gpt4 key购买 nike

在 Asp.Net Core 中实现一个 webhook,它使用 application/x-form-urlencoded 数据发布到 - 它以一种格式接收数据,该格式被设计为易于在 PHP 中处理 w/$_POST 变量(嵌套关联数组)- 表单字段看起来像

foo
bar[barf]
baz[bat][bark]
baz[bat][bant]

是否有一种很好的(优雅且需要很少的代码)方法来连接 Asp.NET Core 模型绑定(bind)以处理此处的嵌套结构?即当 webhook 被发布到时,我们解析一个 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 核心项目和 Controller 看起来像

  public IActionResult Post([FromForm] RootDto request)
{
return Ok(request);
}

enter image description here

顺便说一句,你的根类似乎是错误的我已经改变以使其工作

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-core - 将嵌套的 x-form-urlencoded 数据映射到 Asp.NET Core 中的 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com