1

ルーティング テーブルで WCF Restful サービスを使用しています。

列挙型を使用して出力のシリアライズ方法を制御しようとしていますが、問題が発生しています。たとえば、次の列挙型があります。

public enum outputType
{
    JSON, XML, XML_XSD, CSV, TXT
}

次に、簡単なテスト コールを使用してみます。

[WebGet(UriTemplate = "{ot}/test")]
public Stream test(outputType ot)
{
   using (DataTable dt = new DataTable("test"))
   {
      //build dummy datatable
      dt.Columns.Add("col1");
      dt.Rows.Add(dt.NewRow());
      dt.Rows[0]["col1"] = "asdf";

      //serialize results
      //takes a datatable and serializes it into the outputType's file format
      return _m.serialize(ot, dt);
   }
}

これは正常にコンパイルされますが、「UriTemplate パス セグメントの変数には 'string' 型が必要です。」というエラーが表示されます。

ot 変数を文字列型に変更し、いくつかの検証を一緒にハックできることはわかっていますが、フレームワークを正しく使用することをお勧めします。これどうやってするの?

独自のソリューションをハックする必要があるかどうか心配です。かなり面倒なWebサービスエントリポイントのすべてに検証関数を追加する必要があります。

4

2 に答える 2

1

パラメーターの型を に変更しstringて変換するEnum

public Stream test(string ot) {
    ot = ot ?? "XML";

    try {
        OutputType kind = Enum.Parse(typeof(OutputType), ot);
        . . . 
    }catch(ArgumentException e) }
       . . .
    }
}
于 2013-08-26T18:26:06.287 に答える
0

これは優れた解決策ではありませんが、次のようにすることができます。

[WebGet(UriTemplate = "json/test")]
public Stream testJSON()
{
    return test(outputType.JSON);
}

[WebGet(UriTemplate = "xml/test")]
public Stream testXML()
{
    return test(outputType.XML);
}

...

private Stream test(outputType ot)
{
   using (DataTable dt = new DataTable("test"))
   {
      //build dummy datatable
      dt.Columns.Add("col1");
      dt.Rows.Add(dt.NewRow());
      dt.Rows[0]["col1"] = "asdf";

      //serialize results
      return _m.serialize(outputType, dt);
   }
}
于 2013-08-15T17:47:08.473 に答える