假设我有如下资源:
namespace OpenRastaApp.Resources
{
public class Foo
{
public string Bar { get; set; }
}
}
像:
这样的处理程序namespace OpenRastaApp.Handlers
{
public class FooHandler
{
public object GetAll()
{
ArrayList foos = new ArrayList();
foos.Add(new Foo() { Bar = "Hello," });
foos.Add(new Foo() { Bar = " world!" });
List<Foo> result = new List<Foo>(foos.ToArray(typeof(Foo)) as Foo[]);
return result;
}
public object Get(int id)
{
return new Foo() { Bar = "Baz" };
}
}
}
和配置为:
namespace OpenRastaApp
{
public class Configuration : IConfigurationSource
{
public void Configure()
{
using (OpenRastaConfiguration.Manual)
{
ResourceSpace.Has.ResourcesOfType<Foo>()
.AtUri("/foos")
.And.AtUri("/foos/{id}")
.HandledBy<FooHandler>()
.AsJsonDataContract();
}
}
}
}
/ foos / 1按预期渲染:
{"Bar":"Baz"}
然而,/ foos根本没有渲染。调试控制台显示消息“8- [2010-09-22 13:39:29Z]信息(0)未搜索响应编解码器。响应实体为空或已设置响应编解码器。”我在返回之前已经验证结果是非null。我也试过返回一个Foo [],但是也有同样的错误。
答案 0 :(得分:3)
想出来。必须按如下方式修改我的配置:
namespace OpenRastaApp
{
public class Configuration : IConfigurationSource
{
public void Configure()
{
using (OpenRastaConfiguration.Manual)
{
ResourceSpace.Has.ResourcesOfType<List<Foo>>()
.AtUri("/foos")
.HandledBy<FooHandler>()
.AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType<Foo>()
.AtUri("/foos/{id}")
.HandledBy<FooHandler>()
.AsJsonDataContract();
}
}
}
}
答案 1 :(得分:0)
仅供参考,你也可以做到以下几点:
ResourceSpace.Has.ResourcesOfType<Foo>()
.AtUri("/foos/{id}")
.HandledBy<FooHandler>()
.AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType<List<Foo>>()
.WithoutUri
.AsJsonDataContract();