在 OpenRasta 中使用编解码器文件扩展名会返回 404

发布于 2024-10-17 02:03:49 字数 445 浏览 3 评论 0原文

当在 OpenRasta 中使用编解码器 uri 文件扩展名时,或者无法解析 uri 并返回 404。如果没有文件扩展名,则一切正常。

编解码器是为对象资源定义的,我使用 XmlDataContract 和 JsonDataContract。使用 .xml 或 .json 扩展名都不起作用,这适用于 InMemoryHost(我们用于测试)和 ASP.Net(IIS7,集成模式)。

编解码器配置:

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

是否还需要执行其他操作才能使 uri 文件扩展名正常工作?

When using codec uri file extensions with OpenRasta, OR can't resolve the uri and returns a 404. Without the file extension all works ok.

The codecs are defined for the object resource and I'm using both XmlDataContract and JsonDataContract. Using neither the .xml or .json extension works, this is for both InMemoryHost (which we're using for testing) and ASP.Net (IIS7, integrated mode).

Codec configuration:

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

Is there anything else that needs to be done to make uri file extensions work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城泪 2024-10-24 02:03:49

您需要在 OpenRasta 中将 ContentTypeExtensionUriDecorator 注册为 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();
        }
    }
}

这是因为客户端通常会添加一个 HTTP Accept 标头来定义它支持和感兴趣的内容类型。

有关更多信息,您可以在网络上阅读有关内容协商(通常称为 conneg)的信息。

然后,OpenRasta 将根据 HTTP Accept 标头中客户端的首选项选择返回内容类型。

希望这有帮助。

You need to register the ContentTypeExtensionUriDecorator as a UriDecorator in OpenRasta in order to expose the .xml, .json functionallity.

The below example should allow you to make http requests to:

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();
        }
    }
}

This is because noramlly the client will add an HTTP Accept header to define the content types it supports and is interested in.

For more information you can read about Content Negotiation (often referred to as conneg) on the web.

OpenRasta will then select the return content type based on the client 's preference in the HTTP Accept header.

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文