我创建了一个自定义类型以允许我验证国家/地区代码,但我无法将其用作WebAPI调用的参数。
我的自定义类型,用于验证字符串,然后使用隐式运算符分配自己;
public class CountryCode
{
private readonly string _CountryCode;
private CountryCode(string countryCode)
{
_CountryCode = countryCode;
}
public static implicit operator CountryCode(string countryCode)
{
return (countryCode.Length == 3) ? new CountryCode(countryCode) : null;
}
public override string ToString()
{
return _CountryCode.ToString();
}
}
WebAPI电话;
[HttpGet]
public HttpResponseMessage Get(CountryCode countryCode)
{
// countryCode is null
}
可以解决这个问题;
[HttpGet]
public HttpResponseMessage Get(string countryCode)
{
CountryCode countrycode = countryCode;
return Get(countrycode);
}
private HttpResponseMessage Get(CountryCode countryCode)
{
// countryCode is valid
}
是否可以更改我的自定义类型,以便通过WebAPI参数调用实例化它?
答案 0 :(得分:2)
使用类型转换器
[TypeConverter(typeof(CountryCodeConverter))]
public class CountryCode
{
...
}
public class CountryCodeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string)) { return true; }
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value is string && value != null)
{
return (CountryCode)((string)value);
}
return base.ConvertFrom(context, culture, value);
}
}
然后
[HttpGet]
public HttpResponseMessage Get(CountryCode countryCode)
将起作用