我正在使用.NET Core C#中的数据注解验证数据模型。
型号:
public class UserDetails
{
/// <summary>
/// First name of user
/// </summary>
[Required(AllowEmptyStrings = false, ErrorMessage = "First name is required.")]
[JsonProperty("firstName")]
[DisplayName("firstName")]
public string? FirstName { get; set; }
}
验证扩展类:
public static class RequestValidationExtension
{
public static bool IsValid(this object o, out ICollection<ValidationResult> validationResults)
{
validationResults = new List<ValidationResult>();
return Validator.TryValidateObject(o, new ValidationContext(o, null, null), validationResults, true);
}
}
在azure函数类中检查数据模型验证
UserDetails userRequest= JsonConvert.DeserializeObject<UserDetails>(requestBody);
//Validate Data Annotations.
if (!userRequest.IsValid(validationResults: out var validationResults))
{
string propertyName = validationResults.Select(s => s.MemberNames.FirstOrDefault()).FirstOrDefault().ToString(); -- o/p: FirstName not firstName
string errorMessage = validationResults.Select(s => s.ErrorMessage);
}
电流输出:
字符串propertyName
返回FirstName
而不是firstName
。无论我在JsonProperty()
中提供什么,我都需要camelCase值
预期输出:
firstName
我的目标:
我有如下所示的自定义异常类,我有targetField
要设置模型JSON属性名称。
{
"errordetails": {
"statusCode": 400,
"functionName": "CreateUser",
"errorMessage": "First name is required.",
"targetField": "firstName"
}
}
1条答案
按热度按时间whlutmcx1#
在.net 7.0+中,我现在没有测试,你只需要设置以下内容:
对于我测试的<.net7.0,您创建了ProblemDetailsFactory的继承:
之后,将其注册为singleton:
并为整个项目注册camel大小写,如上面提到的.net 7+。当然,如果您需要不同的序列化输出,您可以更改ProblemDetailsFactory类的扩展。希望这能帮上忙。从这个线程得到的:https://github.com/dotnet/aspnetcore/issues/7439#issuecomment-541625844