我试图想出一种方法将带有连字符的POSTED表单参数映射到采用复杂对象的WEB-API方法。
某些背景信息:
我们正在使用Mailgun将已处理的电子邮件转发到我们自己的自定义Web API控制器方法。
Mailgun POSTS到我们的API,它使用的一些参数中包含连字符 - 例如:body-plain。
我的C#复杂模型将具有在Pascal Case中匹配的属性(不能在属性名称中使用连字符)
所以如果这些参数是由Mailgun生成并发布到我们的WEB API控制器:
from
subject
body-plain
body-stripped
timestamp
我们的复杂对象如下所示:
public class Response{
public string From{get; set;}
public string Subject{get; set;}
public string BodyPlain{get; set;}
public string BodyStripped{get; set;
public int Timestamp{get; set;}
}
然后From,Subject和Timestamp都正确映射 - 但BodyPlain和BodyStripped没有 - 它们是null,因为模型绑定不能将带连字符的参数转换为Camelcase。
有办法做到这一点吗?
我看过一些帖子提到了使用MVC实现这一目的的不同方法,但我们并没有使用MVC,只是严格的WEB API。
答案 0 :(得分:1)
您可以使用控制器中的-keepclassmembers class com.smartmedia.musicplayer.api.AppSetting.** { *; }
对象,这将使参数可用键/值样式。
在Mailgun转发的情况下(我遇到了同样的问题),Request
方法将公开Request.ReadFormAsync()
,您可以从中通过以下方式访问所需的参数:
IFormCollection
答案 1 :(得分:0)
由于参数是通过表单提交而不是JSON发送的,因此使用[JsonProperty(PropertyName = "my-param")]
将无济于事,您必须采取行动,使操作接收类型为FormDataCollection
的参数,然后在内部操作,您将其映射到您的复杂对象。另一种方法是实现自定义模型联编程序。
在此post中,有关于这两个选项的详细信息。