2011-07-18 64 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