我在.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吗?