Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# URI模板中的枚举?_C#_.net_Wcf_Rest - Fatal编程技术网

C# URI模板中的枚举?

C# URI模板中的枚举?,c#,.net,wcf,rest,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

我正在对路由表使用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变量更改为string类型,并一起进行一些验证,但我宁愿正确使用框架。我该怎么做


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

这不是一个很好的解决方案,但您可以这样做:

[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);
   }
}

这不是一个很好的解决方案,但您可以这样做:

[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);
   }
}

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

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

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

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

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

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

Serialize方法采用什么类型的参数?更改了初始问题以反映对注释的响应。对于本例,serialize只接收一个datatable,并将其输出到outputType枚举指定的格式中。serialize方法采用哪种类型的参数?更改了初始问题以反映对注释的响应。对于本例,serialize只接收一个datatable并将其输出为outputType枚举指定的格式