1

私はdataContractを持っています。

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. もう1つのインターフェイスを作成しますが、列挙型ではなく文字列を使用します...
  2. IParameterInspector の実装 (文字列を列挙型に解析)
  3. QueryStringConverter?

何か案は?

アップデート:

解決策を見つけたようです:そう...

 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