gpt4 book ai didi

c# - 从验证器类记录

转载 作者:行者123 更新时间:2023-11-30 23:17:58 25 4
gpt4 key购买 nike

我有一个在 Web API 中使用的简单类,如下所示。如您所见,它有一个通过属性应用的验证器

[CustomerNameValidator]
public class Customer
{
public string CustomerName { get; set; }
}

验证器类如下所示

public class CustomerNameValidatorAttribute : ValidationAttribute
{

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
Customer customer = (Customer)validationContext.ObjectInstance;

if ( string.IsNullOrEmpty(customer.CustomerName))
{
return new ValidationResult("Invalid customer Name");
}


return ValidationResult.Success;
}
}

我想在 IsValid 方法中添加一些日志记录。我正在使用 Startup 类设置的其他地方使用日志记录,如下所示。

public Startup(IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();


loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
loggerFactory.AddNLog();
}

如何在验证属性类中使用记录器?

最佳答案

ValidationContextpopulated使用 HttpContextRequestServices 属性(IServiceProvider 实例)。这意味着您可以使用 GetService method 从中解析服务在 ValidationContext 上。

例如:

var logger = (ILogger<CustomerNameValidatorAttribute>)validationContext.GetService(typeof(ILogger<CustomerNameValidatorAttribute>));

关于c# - 从验证器类记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41131074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com