gpt4 book ai didi

c# - 自定义配置部分 : CallbackValidator called with empty string

转载 作者:行者123 更新时间:2023-11-30 12:36:42 26 4
gpt4 key购买 nike

我正在编写自定义配置部分,我想使用回调来验证配置属性,如本例所示:

using System;
using System.Configuration;

class CustomSection : ConfigurationSection {

[ConfigurationProperty("stringValue", IsRequired = false)]
[CallbackValidator(Type = typeof(CustomSection), CallbackMethodName = "ValidateString")]
public string StringValue {
get { return (string)this["stringValue"]; }
set { this["stringValue"] = value; }
}

public static void ValidateString(object value) {
if (string.IsNullOrEmpty((string)value)) {
throw new ArgumentException("string must not be empty.");
}
}
}

class Program {
static void Main(string[] args) {
CustomSection cfg = (CustomSection)ConfigurationManager.GetSection("customSection");
Console.WriteLine(cfg.StringValue);
}
}

我的 App.config 文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="customSection" type="CustomSection, config-section"/>
</configSections>
<customSection stringValue="lorem ipsum"/>
</configuration>

我的问题是,当调用ValidateString 函数时,value 参数始终为空字符串,因此验证失败。如果我只是删除验证器,则字符串值会正确初始化为配置文件中的值。

我错过了什么?

编辑 我发现实际上验证函数被调用了两次:第一次使用属性的默认值,如果没有指定则为空字符串,第二次使用真实值从配置文件中读取的值。有没有办法修改此行为?

最佳答案

我遇到了同样的问题(除了我创建了自定义验证器而不是使用 CallbackValidator)- 验证器被调用了两次,第一次调用传递了默认值,第二次调用传递了配置值。由于空字符串不是我的其中一个属性的有效值,因此即使我配置了字符串值,它也会导致配置错误。

所以我只是将验证器更改为返回一个空字符串,而不是对其进行验证。然后,您可以使用 IsRequired 属性来控制未提供值时发生的情况。

关于c# - 自定义配置部分 : CallbackValidator called with empty string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780598/

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