我有一个 NancyFx.OWIN 应用程序。我正在尝试利用 Katana 的诊断“ErrorPage”(来自http://www.nuget.org/packages/Microsoft.Owin.Diagnostics/2.0.0)来显示从我的 NancyModules 返回的错误响应。
(这里是武士刀错误页面的屏幕截图:http: //miso-soup3.hateblo.jp/entry/2013/10/30/205653)
虽然我可以将 IAppBuilder 上下文中的错误显示到此页面,但不幸的是,我无法从 Nancy 那里获得错误响应。
我的 Owin 启动看起来像这样:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseWelcomePage("/hello");
NancyOptions nancyOptions = new NancyOptions();
app.UseNancy(options =>
options.PassThroughWhenStatusCodesAre(HttpStatusCode.InternalServerError))
.UseErrorPage();
}
}
这个功能如下: 1.“/hello”显示 Microsoft.Owin.Diagnostics 蓝色笑脸欢迎页面 2.在我的 NancyModules 函数中定义的路由如预期 3.HttpStatusCodes != InternalServerError 由 Nancy 处理(显示“绿色怪物”视图)
但是,当返回 InternalServerError 状态代码时,OWIN IAppBuilder 管道会忽略它们。因此,当我到达以下南希路线时:
Get["/error"] = _ =>
{
throw new Exception("error!");
};
由于我的以下 Nancy 异常管道将所有异常格式化为 InternalServerError 的响应,我希望错误被格式化并呈现为“UseErrorPage()”功能:
public class ErrorPipeline : IApplicationStartup
{
public void Initialize(IPipelines pipelines)
{
pipelines.OnError += (context, exception) =>
{
if (exception is Exception)
return new Response
{
StatusCode = HttpStatusCode.InternalServerError,
ContentType = "text/html",
Contents = (stream) =>
{
var errorMessage =
Encoding.UTF8.GetBytes(
exception.Message);
stream.Write(errorMessage, 0,
errorMessage.Length);
}
};
return HttpStatusCode.InternalServerError;
};
}
}
但是什么都没有显示。我知道管道错误响应作为响应被发回,并且 Nancy 正在传递它,但不知何故 UseErrorPage() 没有捡起它......当我删除传递时,“错误!” 在浏览器中显示为文本。任何想法如何将 NancyFx 的错误响应连接到 Owin.IAppBuilder 管道中?