2011-02-10 37 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