如何在南希提供静态内容

Ian*_*kes 28 nancy

我在Nancy中提供JavaScript等静态内容时遇到了麻烦.

例如,使用自托管示例我已将一个test.js添加到Views文件夹并添加了一个

<script type="text/javascript" src="test.js"></script>
Run Code Online (Sandbox Code Playgroud)

标记到staticview.html页面.如果我在浏览器中查看此页面,则JavaScript正确执行.

但是,当我运行示例时,JavaScript不会被执行.如果我在FireBug中查看该页面,我发现我收到了test.js的404错误.

我试过添加

Get["{file}"] = p =>
{
    string path = string.Format("Views/{0}", p.file);
    return Response.AsJs(path);
};
Run Code Online (Sandbox Code Playgroud)

当我设置一个断点并在即时窗口中执行Response.AsJs(path)时,我得到一个NotFound的StatusCode

我也尝试过添加一个StaticContentConvention,比如

protected override void ConfigureConventions(NancyConventions conventions)
{
    base.ConfigureConventions(conventions);
    conventions.StaticContentsConventions.Add(
        StaticContentConventionBuilder.AddDirectory("/", "Views"));
    conventions.StaticContentsConventions.Add(
        StaticContentConventionBuilder.AddDirectory("Views", "Views"));
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Chr*_*man 37

您可以使用配置静态内容NancyConventions.使用以下引导程序中的代码,您可以将所有静态内容(css/js/html/etc)放在应用程序根目录下名为"static"的文件夹中.

namespace Application
{
    public class ApplicationBootstrapper : DefaultNancyBootstrapper
    {
        protected override void ConfigureConventions(NancyConventions nancyConventions)
        {
            nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Static", @"Static"));
            base.ConfigureConventions(nancyConventions);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您可以访问脚本等静态内容

<script type="text/javascript" src="/static/test.js"></script>
Run Code Online (Sandbox Code Playgroud)

或者css

<link rel="stylesheet" type="text/css" href="/static/styles.css">
Run Code Online (Sandbox Code Playgroud)

  • 在`base.ConfigureConventions(nancyConventions)之前添加你的约定;`对我来说很关键 (3认同)
  • 不需要"复制如果更新"的变化.my/Scripts文件夹中的所有文件仍然默认为"不要复制",到目前为止它们都可以正常使用. (2认同)

JOG*_*JOG 30

如果没有特殊原因,则无需配置任何约定.

Nancy ...附带一个默认约定,它将在content应用程序的路径中查找文件 .

来自NancyFx | 管理静态内容

我通过这样做实现了同样的目标:

  1. 在项目中添加一个名为"content"的文件夹,在那里添加静态内容(.js,.xap,.ico,...)
  2. 对于每个内容文件,设置其属性:Build Action:Embedded Resources; 复制到输出目录:如果更新则复制.
  3. 更改路径以匹配新位置,例如:

<script type="text/javascript" src="content/test.js"></script>

  • 这应该标记为正确答案! (2认同)