自定义类型作为参数传递

时间:2014-04-01 08:10:52

标签: c# types asp.net-web-api

我创建了一个自定义类型以允许我验证国家/地区代码,但我无法将其用作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参数调用实例化它?

1 个答案:

答案 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)

将起作用