NancyFx查看文件夹约定无法在Azure下使用Owin

时间:2015-12-01 06:50:16

标签: c# azure views owin nancy

我在NancyFx中有一个非常简单的模块和视图设置,例如这个;

public class LoginModule : NancyModule
{
    public LoginModule()
    {
        Get["/login"] = _ => View["login", null];
    }        
}

此页面的视图位于project \ views \ login \ login.cshtml。

我已经配置了自定义视图约定来尝试解决问题,例如

nancyConventions.ViewLocationConventions.Clear();
nancyConventions.ViewLocationConventions.Add((viewName, model, viewLocationContext) => string.Concat("views/", viewName));
nancyConventions.ViewLocationConventions.Add((viewName, model, viewLocationContext) => string.Concat("views/", viewLocationContext.ModuleName, "/", viewName));

我使用Owin(带有ASP.NET托管包的Nancy和Microsoft软件包)来管理我的web api层。

在本地测试时,应用程序运行正常,但在部署到Azure时失败。

  

Nancy.RequestExecutionException:哦,不! ---> Nancy.ViewEngines.ViewNotFoundException:无法找到view' login'   目前可用的视图引擎扩展:sshtml,html,htm,cshtml,vbhtml   检查的位置:views / login,views / Login / login

请注意,它记录了我的视图的确切文件夹结构,但由于某些原因,无法找到视图文件。 它注意到支持的视图文件,所以已经拿起了Razor包。

如果我将视图文件移动到\ views文件夹中,这一切都有效,但如果可以的话,我想在逻辑上将文件分开。

使用引用Project.WebApi的Project.Web项目(定义了Nancy引导程序的Owin项目)拆分项目。

在回复另一篇文章here时,我将Owin hander添加到Project.Web web.config文件中。

<handlers>
  <add name="Owin" verb="*" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb" />
  <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
</handlers>

但没有成功。

1 个答案:

答案 0 :(得分:1)

问题只是HTML文件.cshtml需要将文件属性中的构建操作从None更改为Content才能发布。

按照记录here;

进行工作
  

- 文件未包含在项目输出组中,并且未在构建过程中编译。一个示例是包含文档的文本文件,例如自述文件。

     

内容 - 文件未编译,但包含在内容输出组中。例如,此设置是.htm或其他类型的Web文件的默认值。