NancyでJavaScriptなどの静的コンテンツを提供するのに問題があります。
たとえば セルフホスティングサンプル を使用して、Viewsフォルダーにtest.jsを追加し、
<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"));
}
何が悪いのですか?
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">
特別な理由がない場合は、規則を設定する必要はありません。
Nancy ...は、アプリケーションの
content
パスでファイルを検索するデフォルトの規則で出荷されます。From NancyFx |静的コンテンツの管理
私はこれを行うだけで同じことを達成しました:
<script type="text/javascript" src="content/test.js"></script>
完全を期すために追加:ナンシーをセルフホストで実行していて、ビジュアルスタジオのデバッグを介して実行していて、すべての静的コンテンツリクエストに対して404を取得している場合は、ビルドアクションが「常にコピー」に設定されていることを確認する必要があります。 "すべての静的コンテンツファイルに対して!
これを行わない場合、これらのファイルは出力ディレクトリにコピーされないため、存在しないため、404になります。
初めてオンラインでソリューションを共有する。チュートリアルを実行してナンシーを学ぶのに役立つ簡単なハックを見つけるのに4日かかりました。ここに簡単な解決策があります:
Project.jsonファイルに正しい設定があることを確認してください:
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": [ "Views/Car/*" ]
},
次に、CarModule.csに移動します。
Get("/status", _ => View["Car"]);
初めてコードをコンパイルするとき、ビューは機能します。ただし、htmlを編集して再度コンパイルしようとすると、次の小さなハックが必要になります。
変化する:
Get("/status", _ => View["Car"]);
に:
Get("/status", _ => View["Car.html"]);
コンパイラーをだまして、HTMLをアセンブリーに添付する必要があると考えます。
これが、NacyFxのドキュメントから直接の上記のコメントからはあまり機能しない私のような初心者に役立つことを願っています。
自己ホスト型のNancyアプリの場合、ファイルを埋め込みリソースとしてマークする必要があると思います。ビューの場合は、ブートストラップでもこれを行う必要があります。
protected override NancyInternalConfiguration InternalConfiguration
{
get
{
return NancyInternalConfiguration.WithOverrides(
x => x.ViewLocationProvider = typeof (ResourceViewLocationProvider));
}
}
おそらく同じようなことをする必要があります。
または、(メモリから).AsJsの代わりに.AsJsFileを使用する必要があります。