28

Nancy で JavaScript などの静的コンテンツを提供するのに問題があります。

たとえば、セルフ ホスティング サンプルを使用して、test.js を Views フォルダーに追加し、

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

タグを staticview.html ページに追加します。このページをブラウザで表示すると、JavaScript が正しく実行されます。

ただし、サンプルを実行すると、JavaScript は実行されません。FireBug でページを表示すると、test.js で 404 エラーが発生していることがわかります。

追加してみました

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

ブレークポイントを設定し、即時ウィンドウで 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"));
}

私は何を間違っていますか?

4

5 に答える 5

38

を使用して静的コンテンツを構成できます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);
        }
    }
}

これが完了すると、スクリプトなどの静的コンテンツにアクセスできます

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

またはCSS

<link rel="stylesheet" type="text/css" href="/static/styles.css">
于 2012-11-22T17:45:14.873 に答える
30

特別な理由がなければ、規則を構成する必要はありません。

contentNancy ... には、アプリケーションのパスでファイルを検索するデフォルトの規則が付属してい ます。

NancyFxから| 静的コンテンツの管理

私はこれを行うだけで同じことを達成しました:

  1. プロジェクトに「content」というフォルダーを追加し、そこに静的コンテンツ (.js、.xap、.ico など) を追加します。
  2. コンテンツ ファイルごとに、そのプロパティを設定します。ビルド アクション: 埋め込みリソース。出力ディレクトリにコピー: 新しい場合はコピーします。
  3. 新しい場所に合わせてパスを変更します。次に例を示します。

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

于 2013-02-28T09:03:09.880 に答える
4

完全を期すための追加: Nancy をセルフ ホストで実行し、Visual Studio のデバッグを介して実行している場合、すべての静的コンテンツ リクエストに対して 404 が発生する場合は、ビルド アクションが「常にコピーする」に設定されていることを確認する必要があります。 "すべての静的コンテンツ ファイルに対して!

これを行わないと、これらのファイルは出力ディレクトリにコピーされず、存在しないため、404.

于 2015-04-27T19:29:04.017 に答える
1

自己ホスト型のナンシー アプリの場合、ファイルを埋め込みリソースとしてマークする必要があると思います。ビューの場合はそうします。ビューの場合は、ブートストラップでこれを行う必要もあります。

protected override NancyInternalConfiguration InternalConfiguration
{
  get
  {
    return NancyInternalConfiguration.WithOverrides(
      x => x.ViewLocationProvider = typeof (ResourceViewLocationProvider));
  }
}

おそらく似たようなことをしなければなりません。

または、(メモリから) .AsJs の代わりに .AsJsFile を使用する必要があります。

于 2012-11-07T13:07:44.803 に答える