1

我有一个数据合同。

ItemInfo SearchItemByGuid(ClientEnum client, string itemGuid);

其中 ClientEnum 是:

enum ClientEnum
{
Client1,
Client2,
}

我将通过 webHttpBinding 公开数据合约。所以我必须使用WebGet。某一些...

[WebGet(UriTemplate = "items/{client}/{itemguid}"]
ItemInfo SearchItemByGuid(ClientEnum client, string itemGuid);

所以问题是,我怎样才能以良好的方式处理枚举类型......?

想法:

  1. 再制作一个接口,但使用字符串而不是枚举...
  2. 实现 IParameterInspector(将字符串解析为枚举)
  3. 查询字符串转换器?

有任何想法吗?

更新:

看来我找到了解决方案:所以...

 public class ClientEnumQueryStringConverter : QueryStringConverter 
{
    public override object ConvertStringToValue(string parameter, Type parameterType)
    {
//here goes actual conversion
        return base.ConvertStringToValue(parameter, parameterType);
    }

    public override string ConvertValueToString(object parameter, Type parameterType)
    {
//here goes actual conversion
        return base.ConvertValueToString(parameter, parameterType);
    }

    public override bool CanConvert(Type type)
    {
        if (type == typeof(ClientEnum))
            return true;           

        return base.CanConvert(type);
    }
}

最后......

 public class MyWebHttpBehavior : WebHttpBehavior    
{
    WebMessageFormat defaultOutgoingResponseFormat;
    public MyWebHttpBehavior()
    {
        this.defaultOutgoingResponseFormat = WebMessageFormat.Json;
        HelpEnabled = true;
    }

    public override WebMessageFormat DefaultOutgoingResponseFormat
    {
        get
        {
            return this.defaultOutgoingResponseFormat;
        }
        set
        {
            this.defaultOutgoingResponseFormat = value;
        }
    }

    protected override QueryStringConverter GetQueryStringConverter(OperationDescription operationDescription)
    {
        return new ClientEnumQueryStringConverter ();
    }
}
4

0 回答 0