使用 OpenRasta 并给出以下 2 个处理程序:
public class HelloWorldHandler1
{
public string GetHelloWorld(string test, string test2)
{
return "Hello.World!";
}
}
public class HelloWorldHandler2
{
public string GetHelloWorld(string test)
{
return "Hello.World!";
}
}
配置如下
ResourceSpace.Has.ResourcesOfType<Resource1>()
.AtUri("/{test}/{test2}")
.HandledBy<HelloWorldHandler1>();
ResourceSpace.Has.ResourcesOfType<Resource2>()
.AtUri("/Hello/{test}")
.HandledBy<HelloWorldHandler2>();
如果我 GET 则按/first/example
预期使用HelloWorldHandler1.GetHelloWorld
参数调用first
。example
如果我 GET/Hello/example
然后在我期望它被调用时HelloWorldHandler2.GetHelloWorld
使用参数调用。Hello
example
解决方法 1
如果我颠倒配置的顺序:
ResourceSpace.Has.ResourcesOfType<Resource2>()
.AtUri("/Hello/{test}")
.HandledBy<HelloWorldHandler2>();
ResourceSpace.Has.ResourcesOfType<Resource1>()
.AtUri("/{test}/{test2}")
.HandledBy<HelloWorldHandler1>();
然后行为如预期:
GET /first/example => HelloWorldHandler1.GetHelloWorld["first","example"]
GET /Hello/example => HelloWorldHandler2.GetHelloWorld["example"]
解决方法 2
如果更改参数名称:
ResourceSpace.Has.ResourcesOfType<Resource2>()
.AtUri("/Hello/{somethingelse}")
.HandledBy<HelloWorldHandler2>();
public class HelloWorldHandler2
{
public string GetHelloWorld(string somethingelse)
{
return "Hello.World!";
}
}
然后行为也符合预期。
问题
- 尝试以这种方式配置 URI 有错吗?他们在哪些地方可能不明确应该调用哪个处理程序?
- 这是 OpenRasta 中的错误吗?