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>();
I 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 のバグですか?