.net core dotnetcore和kestrel出现Nancy 500服务器错误

.net core dotnetcore和kestrel出现Nancy 500服务器错误,.net-core,nancy,dotnet-cli,.net Core,Nancy,Dotnet Cli,我正在尝试将NancyFX(clint eastwood)与dotnetcore1.1和dotnet cli 1.0.0-rc4-004771一起使用。我目前的项目结构是- CustomBootstrapper.cs HomeModule.cs index.sshtml nancyapp.csproj Program.cs Startup.cs 代码是- nancyapp.csproj netcoreapp1.1 1.1.0 1.1.0 2.0.0-clinteastwood Progra

我正在尝试将NancyFX(clint eastwood)与
dotnetcore1.1
dotnet cli 1.0.0-rc4-004771
一起使用。我目前的项目结构是-

CustomBootstrapper.cs
HomeModule.cs
index.sshtml
nancyapp.csproj
Program.cs
Startup.cs
代码是-

nancyapp.csproj

netcoreapp1.1
1.1.0
1.1.0
2.0.0-clinteastwood
Program.cs
使用System.IO;
使用Microsoft.AspNetCore.Builder;
使用Microsoft.AspNetCore.Hosting;
名称空间nancyapp
{
班级计划
{
静态void Main(字符串[]参数)
{
var host=new WebHostBuilder()
.UseKestrel()
.UseContentRoot(目录.GetCurrentDirectory())
.UseStartup()
.Build();
host.Run();
}
}
}
Startup.cs
使用Microsoft.AspNetCore.Builder;
使用Nancy.Owin;
名称空间nancyapp
{
公营创业
{
公共void配置(IApplicationBuilder应用程序)
{
app.UseOwin(x=>x.UseNancy());
}
}
}
HomeModule.cs
使用Nancy;
名称空间nancyapp
{
公共类家庭模块:NancyModule
{
公共家庭模块()
{
Get(“/”,=>{返回视图[“index.sshtml”];});
Get(“/test/{name}”,args=>newperson(){name=args.name});
}
}
公共阶层人士
{
公共字符串名称{get;set;}
}
}
index.sshtml

文件
欢迎使用Nancy应用程序。
CustomBootstrapper.cs
当前为空

当我尝试访问
Get(“/test/{name}”,args=>newperson(){name=args.name})从rest客户端我得到了预期的结果

但是,当我尝试访问root或
Get(“/”,=>{returnview[“index.sshtml”];}),我得到一个
500
服务器错误-

错误详细信息当前已禁用。要启用它,请设置 TraceConfiguration.DisplayErrorTraces为true。例如 重写引导程序的Configure方法并调用 跟踪(已启用:false,displayErrorTraces:true)

我尝试按照错误消息中的说明进行操作,并通过在
CustomBootstrapper.cs

protected override void应用程序启动(Nancy.TinyIoc.TinyIoCContainer容器,IPipelines管道)
{
var-environment=GetEnvironment();
环境。跟踪(true,true);
}
但是,当我尝试使用
dotnet run

Unhandled Exception: System.ArgumentException: An item with the same
  key has already been added. Key: Nancy.TraceConfiguration at
  System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException(Object key) at 
  System.Collections.Generic.Dictionary`2.Insert(TKey key,TValue value, Boolean add) at
  nancyapp.CustomBootstrapper.ApplicationStartup(TinyIoCContainer container, IPipelines pipelines) in D:\TempWork\nancyapp\CustomBootstrapper.cs:line 17 at
  Nancy.Bootstrapper.NancyBootstrapperBase`1.Initialise() at
  Nancy.Owin.NancyMiddleware.UseNancy(NancyOptions options) at
  Nancy.Owin.DelegateExtensions.UseNancy(Action`1 builder, NancyOptionsoptions) at 
  nancyapp.Startup.<>c.<Configure>b__0_0(Action`1 x) in D:\TempWork\nancyapp\Startup.cs:line 10 at
  Microsoft.AspNetCore.Builder.OwinExtensions.UseOwin(IApplicationBuilder builder, Action`1 pipeline) at
  nancyapp.Startup.Configure(IApplicationBuilder app) in D:\TempWork\nancyapp\Startup.cs:line 10
  --- End of stack trace from previous location where exception was thrown --- at
  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
  Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app) at
  Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() at
  Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() at
  nancyapp.Program.Main(String[] args) in D:\TempWork\nancyapp\Program.cs:line 11
未处理的异常:System.ArgumentException:具有相同
已添加密钥。键:Nancy.TraceConfiguration在
System.ThrowHelper.ThrowaddingDuplicationWithKeyArgumentException(对象键)位于
System.Collections.Generic.Dictionary`2.在
D:\TempWork\nancyapp\CustomBootstrapper.cs中的nancyapp.CustomBootstrapper.ApplicationStartup(TinyIoCContainer容器,IPipelines管道):第17行
Nancy.Bootstrapper.NancyBootstrapperBase`1.Initialise()位于
Nancy.Owin.NancyMiddleware.UseNancy(NancyOptions选项)位于
Nancy.Owin.DelegateExtensions.UseNancy(操作'1生成器,NancyOptions)位于
D:\TempWork\nancyapp\Startup.cs:第10行的
Microsoft.AspNetCore.Builder.owin.UseOwin(IApplicationBuilder Builder,操作`1管道)位于
D:\TempWork\nancyapp\Startup.cs:第10行中的nancyapp.Startup.Configure(IAApplicationBuilder应用程序)
---来自引发异常的上一个位置的堆栈结束跟踪---在
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()位于
Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder应用程序)位于
Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()位于
Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()位于
D:\TempWork\nancyapp\Program.cs中的nancyapp.Program.Main(字符串[]args):第11行

我不确定是什么导致了错误,也不确定如何启用跟踪。有人能帮忙吗?

这里有两个问题:

  • 500是因为找不到视图,您需要通过实现
    IRootPathProvider
    并返回
    Directory.GetCurrent()
    来提供根路径
  • 其次,要启用跟踪,您需要
    public override void Configure(INancyEnvironment环境)
    这将添加密钥,从而获得异常

.NET Core 3.1应用程序中与
Owin>=v3
结合使用Nancy时,您可能会遇到相同的服务器错误(500)

  • 我通过将Microsoft.AspNetCore.Owin从v3.x降级到v2.2.0解决了这个问题。
降级后,我的运行设置如下所示:

返回用于测试的简单文本也很好:

Get(“/”,=>{返回新的文本响应(HttpStatusCode.OK,“Hello world!”);});

当您尝试从浏览器访问
url
时会发生什么?请显示
GetEnvironment
的代码。