Nancy 静态文件处理程序不是应用程序管道的一部分
本文关键字:应用程序 管道 一部分 静态 文件 处理 程序 Nancy | 更新日期: 2023-09-27 18:36:47
我正在尝试在应用程序管道中记录向 Nancy 发出的每个请求,但由于某种原因,我似乎无法记录静态文件请求。以下方法均不捕获对静态文件的请求。
ApplicationPipelines.BeforeRequest += ((ctx) => {
LogTo.Info($"{ctx.Request.UserHostAddress} - {ctx.Request.Method} {ctx.Request.Path}");
return null;
});
ApplicationPipelines.AfterRequest += ((ctx) => {
LogTo.Info($"{ctx.Request.UserHostAddress} - {ctx.Request.Method} {ctx.Request.Path} - {ctx.Response.StatusCode}");
});
任何不是静态文件的东西都可以完美地记录下来。
另外,我正在使用位于此处的约定:https://stackoverflow.com/a/21477824/1657476。Nancy 是使用 Nowin 自托管的,并且是添加到 owin 应用程序构建器的唯一组件。
静态文件处理程序不是 Nancy 应用程序管道的一部分吗?如果是这样,如何挂钩到静态文件请求?
文档说它应该是(管道的一部分)。所以我不明白为什么我不能捡起来。我什至尝试过在开始时直接插入管道钩
AddItemToStartOfPipeline
静态文件处理程序不再是 Nancy 管道的一部分。文档已过时。请参阅问题:https://github.com/NancyFx/Nancy/issues/2328
如果将 Nancy 与 Owin 一起使用,则可以使用中间件来捕获请求和响应(相当于 AfterRequest
):
app.Use(new Func<AppFunc, AppFunc>(next => (async context =>
{
var sendingHeaders = (Action<Action<object>, object>) context["server.OnSendingHeaders"];
sendingHeaders(state =>
{
var ip = context["server.RemoteIpAddress"];
var port = context["server.RemotePort"];
var method = context["owin.RequestMethod"];
var path = context["owin.RequestPath"];
var status = context["owin.ResponseStatusCode"];
LogTo.Info($"{ip}:{port} - {method} {path} - {status}");
}, context);
await next.Invoke(context);
})));
您需要 OnSendingHeaders
钩子,因为如果 Nancy 处理请求,它不会通过。