当为相同类型但具有不同 URI 的两个处理程序注册时,处理程序选择算法在确定要使用哪个处理程序时似乎不会检查 uri。
如果你运行下面的程序,你会注意到只有 HandlerOne 会被调用(两次)。我调用“/one”还是“/two”都没有关系,后者应该由HandlerTwo处理。
我做错了什么还是要在 OpenRasta 中解决这个问题?(我正在使用 2.0.3.0 顺便说一句)
class Program
{
static void Main(string[] args)
{
using (InMemoryHost host = new InMemoryHost(new Configuration()))
{
host.ProcessRequest(new InMemoryRequest
{
HttpMethod = "GET",
Uri = new Uri("http://x/one")
});
host.ProcessRequest(new InMemoryRequest
{
HttpMethod = "GET",
Uri = new Uri("http://x/two")
});
}
}
}
class Configuration : IConfigurationSource
{
public void Configure()
{
using (OpenRastaConfiguration.Manual)
{
ResourceSpace.Has.ResourcesOfType(typeof(object))
.AtUri("/one").HandledBy(typeof(HandlerOne));
ResourceSpace.Has.ResourcesOfType(typeof(object))
.AtUri("/two").HandledBy(typeof(HandlerTwo));
}
}
}
class HandlerOne
{
public object Get() { return "returned from HandlerOne.Get"; }
}
class HandlerTwo
{
public object Get() { return "returned from HandlerTwo.Get"; }
}
更新 我有一种感觉,我可以使用 UriNameHandlerMethodSelector 来完成我想要的类似操作,如http://trac.caffeine-it.com/openrasta/wiki/Doc/Handlers/MethodSelection所述,但是我必须注释每个处理程序方法并执行 AtUri().Named(),这在我看来就像样板文件,我想避免这种情况。AtUri(X).HandledBy(Y) 不是清楚地说明了 X 和 Y 之间的联系吗?