我有一个使用Nancy的网站,使用OWIN托管。
在我的Startup.cs文件中,我定义了PassThroughOptions,如下所示:
public void Configuration(IAppBuilder app)
{
app.UseNancy(o => {
o.PassThroughWhenStatusCodesAre(
HttpStatusCode.NotFound,
HttpStatusCode.InternalServerError
);
o.Bootstrapper = new Bootstrapper();
});
app.UseStageMarker(PipelineStage.MapHandler);
}
我需要传递NotFound请求,以便我的网站根目录(robots.txt或sitemap.xml)中捆绑的.less文件或miniprofiler-results或静态文件等工作正常工作。
我还有一个自定义的StatusCodeHandler用于404代码,它还检查自定义标头以区分静态文件(或.less bundle / miniprofiler)和我的模块中找不到的实际内容。方法
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
Log.Warn("Not found: " + context.Request.Url);
base.Handle(statusCode, context, "Errors/NotFound");
}
然后,这个处理程序应该显示错误页面。
protected void Handle(HttpStatusCode statusCode, NancyContext context, string view)
{
var response = new Negotiator(context)
.WithModel(GetErrorModel(context))
.WithStatusCode(statusCode)
.WithView(view);
context.Response = responseNegotiator.NegotiateResponse(response, context);
}
但永远不会显示错误页面。请求被处理三次,最终显示默认的IIS错误页面(使用errorMode ="自定义"用于httpErrors)或仅显示白页(使用existingResponse =" PassThrough"用于httpErrors)
在OWIN上托管南希网站时,有没有办法显示像自定义错误页面这么简单的东西?
答案 0 :(得分:0)
你在那里看到的很好看,看起来你正在使用Hosting Nancy with Owin文档。
这对我有用:
Startup.cs(Owin需要):(我们都对配置函数进行了不同的编码,你只是使用扩展助手而我不是。结果相同。这是在我的App.Web项目中。 )
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy(options =>
{
options.Bootstrapper = new BootStrapper();
options.PerformPassThrough = context => context.Response.StatusCode == HttpStatusCode.NotFound;
});
app.UseStageMarker(PipelineStage.MapHandler);
}
}
404处理程序:(根据文档,无论项目在何处,通过实现IStatusCodeHandler它都会被Nancy自动选中。这是在我的App.WebApi项目中与其他模块类一起使用。)< / p>
public class StatusCode404Handler : IStatusCodeHandler
{
public bool HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
{
return statusCode == HttpStatusCode.NotFound;
}
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var response = new GenericFileResponse("statuspages/404.html", "text/html")
{
StatusCode = statusCode
};
context.Response = response;
}
}
我的App.Web项目中的'statuspages'文件夹:
检查此SO帖子,以便使用GenericFileReponse或ViewRenderer(How to display my 404 page in Nancy?)进行比较。