在OpenRasta中,配置可能不明确的URI是错误的吗?

时间:2012-04-11 16:02:43

标签: c# openrasta

使用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>();

如果我获得/first/example,那么HelloWorldHandler1.GetHelloWorld会按预期调用参数firstexample

如果我获取/Hello/example,那么当我希望使用HelloWorldHandler2.GetHelloWorld调用Hello时,会使用参数example调用ResourceSpace.Has.ResourcesOfType<Resource2>() .AtUri("/Hello/{test}") .HandledBy<HelloWorldHandler2>(); ResourceSpace.Has.ResourcesOfType<Resource1>() .AtUri("/{test}/{test2}") .HandledBy<HelloWorldHandler1>();

解决方法1

如果我颠倒了配置的顺序:

GET /first/example => HelloWorldHandler1.GetHelloWorld["first","example"]
GET /Hello/example => HelloWorldHandler2.GetHelloWorld["example"]

然后行为符合预期:

ResourceSpace.Has.ResourcesOfType<Resource2>()
    .AtUri("/Hello/{somethingelse}")
    .HandledBy<HelloWorldHandler2>();

public class HelloWorldHandler2
{
    public string GetHelloWorld(string somethingelse)
    {
        return "Hello.World!";
    }
}

解决方法2

如果更改参数名称:

{{1}}

然后行为也符合预期。

问题

  1. 尝试以这种方式配置URI是错误的吗?关于应该调用哪个处理程序,它们可能有些模糊不清?
  2. 这是OpenRasta中的错误吗?

1 个答案:

答案 0 :(得分:2)

  1. 是的,我说这是错的,2。不,这不是一个错误。
  2. 对/ Hello / example的请求匹配模式/ {test} / {test2},因此如果首次注册该模式,它将处理请求。

    避免使用含糊不清的URI来避免模棱两可的结果:)

相关问题