URI模板中的枚举
本文关键字:枚举 URI | 更新日期: 2023-09-27 18:27:45
我使用的是带有路由表的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服务入口点添加一个验证功能,这将相当混乱。
将参数类型更改为string
并转换为Enum
public Stream test(string ot) {
ot = ot ?? "XML";
try {
OutputType kind = Enum.Parse(typeof(OutputType), ot);
. . .
}catch(ArgumentException e) }
. . .
}
}
这不是一个好的解决方案,但您可以这样做:
[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);
}
}