绑定属性FromForm .NET Core Web API

时间:2019-02-25 14:11:11

标签: c# .net .net-core asp.net-core-webapi

我有.NET Core Web API项目。我的动作控制器之一是:

[HttpPost]
public async Task<IActionResult> Notify([FromForm] NotifyInput input)
{ ... }

NotifyInput.cs文件在单独的项目(.NET标准)中:

public string BodyPlain { get; set; }

public string BodyHtml { get; set; }

public List<Attachment> Attachments { get; set; }

public class Attachment
{
    public int Size { get; set; }

    public string Url { get; set; }

    public string Name { get; set; }

    public string ContentType { get; set; }
}

我发送给此方法的参数是:

body-plain: 123
body-html: <p>123</p>
attachments: [{"url": "http://example.com", "content-type": "image/jpeg", "name": "pexels-photo.jpg", "size": 62169}]

我正在尝试通过邮递员以 x-www-form-urlencoded form-data 的形式发送数据。

但是当我调试此代码时,我看到它们都是NULL

属性[JsonProperty("body-plain")]对我没有帮助。

如何绑定这些参数?

2 个答案:

答案 0 :(得分:0)

我对此进行了研究,发现由于要向端点传递x-www-form-urlencoded,因此设置[JsonProperty("body-plain")]无效;因为您没有发送Json。

因此,要传递这些值,您必须在模型上使用确切的名称(不区分大小写,但不能使用连字符)。因此,通过以下

bodyplain:123
bodyhtml:<p>123</p>

应该工作。 attachments[0].content-type也必须成为attachments[0].ContentType

答案 1 :(得分:0)

尝试使用[ModelBinder(Name =“ name”)]指定用于绑定数据的名称

public class NotifyInput
{
    [ModelBinder(Name = "body-plain")]
    public string BodyPlain { get; set; }
    [ModelBinder(Name = "body-html")]
    public string BodyHtml { get; set; }

    public List<Attachment> Attachments { get; set; }
}
public class Attachment
{
    public int Size { get; set; }

    public string Url { get; set; }

    public string Name { get; set; }

    [ModelBinder(Name = "content-type")]
    public string ContentType { get; set; }

}