我正在尝试记录在应用程序管道中向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 app builder的组件。
静态文件处理程序不是Nancy应用程序管道的一部分吗?如果是这样,我如何挂钩静态文件请求?
Documentation说它应该是(管道的一部分)。所以我不明白为什么我不能接受它。我甚至尝试使用AddItemToStartOfPipeline
答案 0 :(得分:1)
静态文件处理程序不再是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在处理请求时不会通过。