繁体   English   中英

将模型值设置为小写的 ASP.NET Core 2.1 属性

[英]ASP.NET Core 2.1 Attribute to set model value to lowercase

我想知道当我在控制器上接收到模型时,是否有办法强制某些属性的值始终为小写或大写。 最好以一种干净的方式,比如使用属性。

例子:

控制器:

[HttpPost]
public async Task<Model> Post(Model model)
{
    //Here properties with the attribute [LowerCase] (Prop2 in this case) should be lowercase.
}

模型:

public class Model
{
    public string Prop1 { get; set; }

    [LowerCase]
    public string Prop2 { get; set; }
}

我听说使用自定义ValidationAttribute更改值不是一件好事。 还决定创建一个自定义DataBinder ,但没有找到我应该如何实现它的确切方法,当尝试时,我的控制器中只收到null

替代解决方案:Fluent API:

modelBuilder.Entity<Model>()
    .Property(x => x.Prop2)
    .HasConversion(
        p => p == null ? null : p.ToLower(),
        dbValue => dbValue);

或者,使用带有支持字段的属性封装在类本身中:

private string _prop2;
public string Prop2
{ 
    get => _prop2;
    set => value?.ToLower();
}

决定使用自定义 JsonConverter。

public class LowerCase : JsonConverter
{
    public override bool CanRead => true;
    public override bool CanWrite => false;
    public override bool CanConvert(Type objectType) => objectType == typeof(string);

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return reader.Value.ToString().ToLower();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

public class Model
{
    public string Prop1 { get; set; }

    [JsonConverter(typeof(LowerCase))]
    public string Prop2 { get; set; }
}

仍然认为有更好的方法,将继续寻找一些东西。

您可以制作只读属性

 public string Prop2 { get{return Prop1.ToLower()}}

或那样

 public string Prop2 => Prop1.ToLower();

您可以像这样构建类构造函数:

public class Model
{
        public Model()
        {
            this.Prop2 = this.Prop2.ToLower();
        }
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM