枚举URI模板?

时间:2013-08-15 17:43:39

标签: c# .net wcf rest

我正在使用带路由表的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路径段的变量必须有''字符串'。”。

我知道我可以将ot变量更改为键入字符串并一起进行一些验证,但我宁愿正确使用该框架。我怎么能这样做?

我担心如果我必须自己解决我自己的解决方案,我将不得不为我的每个web服务入口点添加一个验证函数,这将非常混乱。

2 个答案:

答案 0 :(得分:1)

将参数类型更改为string并转换为Enum

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

    try {
        OutputType kind = Enum.Parse(typeof(OutputType), ot);
        . . . 
    }catch(ArgumentException e) }
       . . .
    }
}

答案 1 :(得分: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);
   }
}