2011-02-10 12 views
3

在OpenRasta中使用編解碼器uri文件擴展名時,OR無法解析URI並返回404.如果沒有文件擴展名,則一切正常。在OpenRasta中使用編解碼器文件擴展名返回404

編解碼器是爲對象資源定義的,我使用的是XmlDataContract和JsonDataContract。既不使用.xml或.json擴展名,也適用於InMemoryHost(我們用於測試)和ASP.Net(IIS7,集成模式)。

編解碼器配置:

ResourceSpace.Has.ResourcesOfType<object>() 
       .WithoutUri 
       .AsXmlDataContract() 
       .And.AsJsonDataContract(); 

還有什麼需要做才能使URI文件擴展名工作?

回答

4

您需要將ContentTypeExtensionUriDecorator註冊爲OpenRasta中的UriDecorator以便公開.xml,.json函數的所有權。

下面的例子應該讓你做出HTTP請求:

GET /home.json

GET /home.xml

public class RastaConfig : IConfigurationSource 
{ 
    public void Configure() 
    { 
     using(OpenRastaConfiguration.Manual) 
     { 
      ResourceSpace.Uses.UriDecorator<ContentTypeExtensionUriDecorator>(); 

      ResourceSpace.Has.ResourceOfType<Home>() 
       .AtUri("/home") 
       .HandledBy<HomeHandler>() 
       .AsXmlDataContract() 
       .And.AsJsonDataContract(); 
     } 
    } 
} 

這是因爲noramlly的客戶端將添加一個HTTP Accept頭來定義它支持並感興趣的內容類型。

欲瞭解更多信息,您可以閱讀關於網絡上的內容協商(通常稱爲conneg)。

然後,OpenRasta將根據HTTP Accept頭中的客戶端首選項來選擇返回內容類型。

希望這會有所幫助。

+0

謝謝斯科特。我們已經在測試中使用了Accept頭,但也想添加對文件擴展名的支持。 – Shane22 2011-02-10 17:14:57