2011-07-18 25 views
2

我使用OpenRasta框架在.NET服务,我在处理程序OpenRasta - 当资源URI不正确

public OperationResult Delete(int Id) 
{ 
    // Do some operation and get an entity 
    return new OperationResult.OK(MyResource); 
} 

我的配置看起来像下面下面已经一个方法返回不正确的状态代码:

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

我的要求是诬陷如下

HttpMethod: DELETE 
AcceptHeader: "application/xml" 
URI: http://localhost/MyResource/a 

请遵守资源PARAM eter:delete方法接受整数,而我传递一个字符。

有了这个请求,我预计404状态码,而不是405方法不允许。任何人都可以解释这种行为,为什么它返回405?

如果我在URI得出不正确的资源名称返回我404为前:URI:http://localhost/OtherResource/a

更新:支持我测试这个使用OpenRasta的InMemoryHost和删除方法

回答

1

我相信行为是正确的。输入的URI匹配一个OpenRasta拥有的URI,并且您有一个Id是int的方法。 URI被解析并且没有任何注册方法可以执行(它们都没有一个字符串作为Id),所以OR没有选择,并且知道在资源被注册的时候,它没有可以使用的方法来执行当前请求,因此405.

+0

感谢您的信息。通过HTTP规范阅读后,我对此更加困惑。无论如何,规范说响应必须包含允许包含此资源的有效方法列表的头。是OR发送允许标题?我找不到任何这样的。 – JPReddy

+0

因为各种各样的技术原因,我们不提供这些东西。它会得到修正。 – SerialSeb