我使用POST
方法触发发送电子邮件
[HttpPost]
public HttpResponseMessage Post(IEmail model)
{
SendAnEmailPlease(model);
}
我有很多类型的电子邮件要发送,所以我抽象到一个界面所以我只需要一个帖子方法
config.BindParameter(typeof(IEmail), new EmailModelBinder());
我的模型活页夹很受欢迎
public class EmailModelBinder : IModelBinder
{
public bool BindModel(
HttpActionContext actionContext,
ModelBindingContext bindingContext )
{
// Logic here
return false;
}
}
我正在努力将bindingContext.PropertyMetadata
变成我的电子邮件POCO之一的逻辑
public IDictionary<string, ModelMetadata> PropertyMetadata { get; }
在PropertyMetadata中,我将对象类型作为字符串传递,我认为我可以用它来创建一个使用Activator.CreateInstance
方法的类。
eg: EmailType = MyProject.Models.Email.AccountVerificationEmail
有没有一种简单的方法可以实现这一目标?
相关问题
答案 0 :(得分:0)
这是我提出的解决方案,可能对其他人有用。
public class EmailModelBinder : IModelBinder
{
public bool BindModel(
HttpActionContext actionContext,
ModelBindingContext bindingContext)
{
string body = actionContext.Request.Content
.ReadAsStringAsync().Result;
Dictionary<string, string> values =
JsonConvert.DeserializeObject<Dictionary<string, string>>(body);
var entity = Activator.CreateInstance(
typeof(IEmail).Assembly.FullName,
values.FirstOrDefault(x => x.Key == "ObjectType").Value
).Unwrap();
JsonConvert.PopulateObject(body, entity);
bindingContext.Model = (IEmail)entity;
return true;
}
}