我有.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")]
对我没有帮助。
如何绑定这些参数?
答案 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; }
}