我已經設置了Nancy引導程序來從非默認目錄路徑(它是自我託管的Nancy)提供靜態內容。Nancy無法在自定義約定中找到靜態內容
奇怪的是,以下工作適用於自定義視圖位置約定,但不適用於js或css靜態內容約定(並且是的,這些位置都存在文件和文件夾!)。我試圖解決這個問題的嘗試進一步複雜化,因爲我還沒有想出如何記錄未找到靜態內容時發生的錯誤。
using System;
using System.IO;
using Nancy;
using Nancy.Conventions;
using Nancy.Bootstrapper;
using Nancy.TinyIoc;
namespace MyApp
{
public class ApplicationBootstrapper : DefaultNancyBootstrapper
{
private const string RELATIVE_PATH_TO_SOURCE = @"../static/MyApp/";
protected override void ConfigureConventions(NancyConventions nancyConventions)
{
nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("js", string.Concat(RELATIVE_PATH_TO_SOURCE, "Scripts/")));
nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("css", string.Concat(RELATIVE_PATH_TO_SOURCE, "Content/")));
this.Conventions.ViewLocationConventions.Add((viewName, model, context) =>
{
return string.Concat(RELATIVE_PATH_TO_SOURCE, "Views/", viewName);
});
this.Conventions.ViewLocationConventions.Add((viewName, model, context) =>
{
return string.Concat(RELATIVE_PATH_TO_SOURCE, "Views/", context.ModuleName, "/", viewName);
});
base.ConfigureConventions(nancyConventions);
}
protected override IRootPathProvider RootPathProvider
{
get
{
return new MyRootPathProvider();
}
}
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
pipelines.OnError += (ctx, ex) =>
{
Console.WriteLine("RootPath : {0}", DebugRootPathProvider.RootPath);
Console.WriteLine("Unhandled error on request: {0} : {1}", ctx.Request.Url, ex.Message); //HACK
Console.WriteLine(ex.StackTrace); //HACK poor man's logging
return null;
};
}
}
public class MyRootPathProvider : IRootPathProvider
{
public static readonly string RootPath;
static MyRootPathProvider()
{
RootPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
}
public string GetRootPath()
{
return RootPath;
}
}
}
輸出來自Chrome和procmon中如下:
我應該如何:有沒有發現js和css文件發生
- 登錄錯誤?
- 用靜態文件約定解決404錯誤?
我在想*如果你在*改變約定後調用基礎'ConfigureConventions' *,你會發現它重置它......但這只是一個猜測。 – Crisfole
我已經在兩個位置嘗試過'ConfigureConventions',沒有任何運氣。 –
這似乎是南希[旨在不服務任何子文件夾以外的靜態內容](https://github.com/NancyFx/Nancy/blob/master/src/Nancy.Tests/Unit/StaticContentConventionBuilderFixture.cs# L107),但它仍然沒有解釋爲什麼它會默默地失敗並且不提供錯誤消息。 –