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

时间:2018-02-19 22:50:13

标签: asp.net-core dto

在使用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)。

1 个答案:

答案 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);
        }

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;}
        }
    }
}
相关问题