Mak*_*kla 5 c# asp.net-core asp.net-core-2.0
我想增强ModelBinder返回的最终结果。
例如:
public class MyModel
{
public int Order {get;set;}
[MyUpperCaseAttribute]
public string Title {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在 API 方法中,我希望MyModelhas 的所有字符串属性MyUpperCaseAttribute都是大写的。
例如:
[HttpPost("AddRecord")]
public async Task<ActionResult<int>> AddRecord(MyModel model)
{
model.Title should be upper case, even if send from client in lower case.
}
Run Code Online (Sandbox Code Playgroud)
我的想法是覆盖默认值ModelBinder并枚举所有属性并检查属性是否为字符串并且具有MyUpperCaseAttribute并将属性值更正为大写。我检查了文档,但示例没有填写正确,因为它们完全重新设计了返回的内容。我只想修改结果属性。
实现所需行为的最佳选择是什么?
重要提示:(已编辑):
如果指令属性可以堆叠,那就太好了:
public class MyModel
{
public int Order {get;set;}
[MyUpperCaseAttribute]
[RemoveSpacesAttribute]
public string Title {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
编辑:它看起来与此
类似,但如果不是其他,这是 ASP.NET Core,链接上只是 ASP.NET。方法、属性、接口……都不一样。
我应该说,如果 JSON 大小写规则能够工作那就太好了:
public class MyModel
{
public int Order {get;set;}
public string Title {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
如果{order: 1, title: "test"}(注意小写)是从 JavaScript 发送的,应该可以工作。
您可以在您的内部执行此操作,MyUpperCaseAttribute如下所示:
public class MyUpperCaseAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if(value != null)
{
validationContext.ObjectType
.GetProperty(validationContext.MemberName)
.SetValue(validationContext.ObjectInstance, value.ToString().ToUpper(), null);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
属性值将转换为UpperCase期间Model Binding。我已经在我身边检查过了,效果非常好。
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |