我在.net服务中使用OpenRasta框架,并且在处理程序中有以下两种方法

public OperationResult Get(int Number)
{
// Do some operation and get an entity
  return new OperationResult.OK(Single-MyResource);
}

public OperationResult GetQ()
{
// Do some operation and get an entity
  return new OperationResult.OK(List-Of-MyResource);
}


我的配置如下所示

ResourceSpace.Has.ResourcesOfType<MyResource>()
          .AtUri("/MyResource/{Id}")
          .And.AtUri("/MyResource")
          .HandledBy<MyResourceHandler>()
          .AsJsonDataContract()
          .And.AsXmlDataContract()


 ResourceSpace.Has.ResourcesOfType<IList<MyResource>>()
         .AtUri("/MyResources")
         .HandledBy<MyResourceHandler>()
         .AsJsonDataContract()
         .And.AsXmlDataContract();


HttpMethod:GET
AcceptHeader:“应用程序/ json”
URI:http://testDomain.com/MyResource/

上面的请求给了我MyResource的列表,与我为下面的请求得到的一样

HttpMethod:GET
AcceptHeader:“应用程序/ json”
URI:http://testDomain.com/MyResources/

将配置更改为

ResourceSpace.Has.ResourcesOfType<MyResource>()
          .AtUri("/MyResource/{Id}")
          .And.AtUri("/MyResource").Named("MyResource")
          .HandledBy<MyResourceHandler>()
          .AsJsonDataContract()
          .And.AsXmlDataContract()


并在处理程序中进行适当的更改,即

[HttpOperation(HttpMethod.GET, ForUriName = "MyResource")]


OpenRasta返回415 http状态代码。

以上再次不一致。

对于与上述类似配置的其他资源
OpenRasta抛出403 http状态代码

最佳答案

第一种情况是正确的。您在两者之间共享一个处理程序。这样,当查看处理程序以选择一种方法时,将有一个带有参数的候选者,而另一个没有参数。当您转到/ MyResource时,它将找到处理程序并找到没有参数的方法。这是预期的行为。

在您的第二种配置中,这里缺少一些东西。 415是OR不能理解请求数据的时间。由于它是GET,因此不应包含任何请求媒体类型。这将需要一个调试日志来检查发生了什么。您确定您的请求没有附带一些请求数据和Content-Type吗?

10-08 02:58