asp.net web api - 清理输入字符串

时间:2014-02-19 15:25:30

标签: asp.net asp.net-web-api model-binding

当前方法是一个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 ......但似乎不起作用。

知道如何以非侵入性的方式解决这个问题吗?

1 个答案:

答案 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);
    }
}