当前方法是一个post操作,构造一个命令并将其放在总线上。我不喜欢的部分是 ModelHelper.Trim ,见下文。
[ValidationActionFilter]
public void Post([FromBody]CompanyFormModel company)
{
var newCompany = new NewCompany
{
Id = id,
Name = ModelHelper.Trim(company.Name),
Description = ModelHelper.Trim(company.Description),
Sector = ModelHelper.Trim(company.Sector),
};
_bus.Send(newCompany);
}
ModelHelper.Trim 正在检查该字段是否为字符串,如果不为null则执行修剪。 有任何方法可以将此作为所有帖子和看跌期权的重要关注点。
试图在Formatters.JsonFormatter.SerializerSettings.Converters中注册一个TrimmingConverter ......但似乎不起作用。
知道如何以非侵入性的方式解决这个问题吗?
答案 0 :(得分:5)
也许您使用的是DataContractJsonSerializer
而不是JSON.net?
删除此行(如果存在(或将其设置为false):
config.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;
将转换器添加到JsonFormatter确实有效。这是我的:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new TrimmingConverter());
...
TrimmingConverter
public class TrimmingConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
var text = (string)reader.Value;
return text != null ? text.Trim() : null;
}
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
writer.WriteValue(value);
}
}