[英]Using ASP.Net Core automapper and trying to check if the value is null so I can set the value conditionally
[英]How to check null properties in AutoMapper using .NET Core
我有 2 个类 SMSModel,SMSRequest。 我创建了 AutoMapper 并在 Azure Function HTTP 触发器中启动。
Step1:下面安装NuGet Package。
AutoMapper.Extensions.Microsoft.DependencyInjection
第2步:
在 azure function 启动时启动了来自不同程序集的 AutoMapper 配置文件。
services.AddAutoMapper(Assembly.GetAssembly(typeof(AutoMapperProfile)));
第3 步:创建了 2 个属性很少的类。
public class SMSModel
{
public string MobileNumber { get; set; }
public string UserId { get; set; }
public string Code { get; set; }
.
.
.
.
}
public class SMSRequest
{
[Required(AllowEmptyStrings = false, ErrorMessage = "The 'MobileNumber' field is required.")]
[JsonProperty("MobileNumber")]
public string MobileNumber { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "The 'UserId' field is required.")]
[JsonProperty("UserId ")]
public string UserId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "The 'Code' field is required.")]
[JsonProperty("Code ")]
public string Code { get; set; }
.
.
.
.
}
第 4步:将请求和 Model 类映射到自动映射器配置文件 class 中的映射器。
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<SMSRequest, SMSModel>();
// .ForMember(dest => dest.MobileNumber, act => act.Condition(src => src.MobileNumber != null ));
}
}
Step5:在 HTTP 触发器 Function c# 中注入 Automapper。分享部分代码。
private readonly IMapper _mapper;
public SMSHTTPTrigger(
ILogger<SMS> logger,
IMapper mapper)
{
this._logger = logger;
this._mapper = mapper;
}
public async Task<IActionResult> SendSMS(
[HttpTrigger(
AuthorizationLevel.Function, "post", Route = null)]
HttpRequest req)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
SMSRequest data = JsonConvert.DeserializeObject<SMSRequest>(requestBody);
var smsModelData = _mapper.Map<SMSModel>(data);
// Here I want to list all properties (fields) which are having null or empty string without checking each property manually like as below ..
if(string.IsNullOrEmpty(smsModelData.MobileNumber)
{
}
}
我尝试.ForMember with condition
但徒劳无功。
是否可以使用 AutoMapper 检查 null 或空字符串的字段?
目标是仅找出 Null 个属性。 因此使用扩展作为替代方案,它在没有 Automapper 的情况下对我有用。
分机 Class:
public static class HttpRequestValidationExtension
{
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);
}
}
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
SMSRequest data = JsonConvert.DeserializeObject<SMSRequest>(requestBody);
if (!data.IsValid(validationResults: out var validationResults))
{
//Incase if want to loop for each property
foreach (var failure in validationResults)
{
string message = failure.MemberNames.FirstOrDefault() + " Message" + failure.ErrorMessage;
//Console.WriteLine("Property " + memberName + " failed validation. Error was: " + failure.ErrorMessage);
}
//Single line code statement to fetch all null properties
string invalidrequestErrorMessage = $" Invalid Request body. Please check these errors. {string.Join(" ", validationResults.Select(s => s.ErrorMessage))}";
var badrequestObject = new
{
StatusCode = 400,
ErrorDetails = new
{
FunctionName = nameof(SendSMS),
ErrorMessage = invalidrequestErrorMessage
}
};
return new BadRequestObjectResult(badrequestObject);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.