1

我正在使用 OpenRasta 2.0,并在控制台应用程序中托管。

我希望能够从此设置中返回一些静态 HTML 页面和 JavaScript 文件,例如:/index.html /jquery.js

这些文件是完全静态的,即不需要处理程序或资源。

我已将适当的文件添加到项目中,最初尝试了以下语法:

ResourceSpace.Has
.ResourcesOfType<object>()
.AtUri("/")
.HandledBy<HtmlHandler>()
.RenderedByAspx("~/Views/IndexView.aspx");

.aspx 文件被添加到项目的“视图”文件夹下,并将构建操作设置为“嵌入式资源”。这会在尝试解析虚拟路径时在运行时导致 NullReferenceException。如果我将文件的构建操作设置为“编译”,那么它将无法编译,我猜是因为控制台项目不理解 ASPX。

如果引用 WebForms 编解码器,我还尝试了以下可用的简写语法:

ResourceSpace.Has
.TheUri("/jquery.js")
.ForThePage("~/Views/jquery.js");

但这与我最初的方法存在相同的问题,尽管确实消除了对虚拟处理程序的需要。据我所知,WebForms 编解码器不能在控制台应用程序中使用,因为无法编译 ASPX 文件。

我能够使用 Razor 编解码器返回 HTML,因为这需要嵌入视图模板。但是 - 我无法使用相同的技术返回具有适当媒体类型的 JavaScript 文件,我不得不将原本的静态文件转换为定义了 @resource 的 .cshtml 文件。

我在网上找不到任何使用 OpenRasta 返回静态 HTML 和/或 JavaScript 的示例。我希望为此找到一个专用的配置 API,例如“TheUri”语法,但独立于 WebForms 编解码器。

我可以创建自己的“EmbeddedFileHandler”来返回静态嵌入文件的内容,但我觉得我错过了一些东西,因为这是一个如此简单的用例......

4

1 回答 1

2

任何依赖于正在初始化的 asp.net 管道(例如 aspx webforms 页面)的东西都无法编译,因为没有 BuildProvider 来执行它,主要是因为 webforms 与 asp.net 管道的耦合过于紧密。

OR 2 并没有真正设计为用作 asp.net 之外的完整 Web 堆栈来提供静态内容,因为通常主机环境更适合这样做,但这绝对是我们将在 3.0 中解决的问题。

我的建议是将 FileInfo 注册为资源,创建一个可以扫描文件系统以查找所需文件的处理程序,并提供您自己的编解码器来流式传输数据或调用主机的 API http 监听器。它应该是大约 20 行代码,并且会成为一篇很棒的博客文章。:)

于 2011-06-21T20:35:03.557 回答