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

rus*_*der 1 asp.net model-binding asp.net-web-api

当前方法是后期操作,构造命令并将其放在总线上.我不喜欢的部分是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);
}
Run Code Online (Sandbox Code Playgroud)

ModelHelper.Trim正在检查该字段为字符串,如果不为空做装饰.有任何方法可以将其作为所有帖子和看跌期权的重要关注点.

试图在Formatters.JsonFormatter.SerializerSettings.Converters中注册一个TrimmingConverter ......但似乎不起作用.

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

Los*_*ter 5

也许你正在使用DataContractJsonSerializer而不是JSON.net?

如果存在(或将其设置为false),请删除此行:

config.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;
Run Code Online (Sandbox Code Playgroud)

将转换器添加到JsonFormatter确实有效.这是我的:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new TrimmingConverter());

        ...
Run Code Online (Sandbox Code Playgroud)

修剪转换器

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);
    }
}
Run Code Online (Sandbox Code Playgroud)