如何更改IIS记录的OWIN请求

本文关键字:OWIN 请求 记录 何更改 IIS | 更新日期: 2023-09-27 18:04:03

使用我的自定义OWIN中间件,我想捕获GET请求以向查询字符串添加参数。

我不知道我是否正确,但实际上我是这样做的:

context.Request.QueryString = new QueryString(context.Request.QueryString.ToString() + "param=value")

但是我也希望这个请求的IIS日志文件条目是更新后的请求,而不是原来的请求。

原始日志:

2015-07-22 09:32:35::1 GET/image .gif - 56782 -::1 Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - 200 00 102891

将日志:

2015-07-22 09:32:35::1 GET/image .gif param=value 56782 -::1 Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - 200 00 102891

我该怎么做呢?

如何更改IIS记录的OWIN请求

对我来说,更好的选择是创建自己的文件日志,而不是基于外部日志(在本例中是IIS日志)。例如,您可以使用http://nlog-project.org/并在你自己的OwinMiddleware中使用它。

public class GetMethodMiddleware : OwinMiddleware
{
    public GetMethodMiddleware(OwinMiddleware next) :
        base(next)
    { }
    public override async Task Invoke(IOwinContext context)
    {
        var logger = ObjectFactoryHost.ObjectFactory.GetObject<ILogger>();
        var requestMethod = (string)context.Request.Environment["owin.RequestMethod"];
        var requestQueryString = (string)context.Request.Environment["owin.RequestQueryString"];
        var requestPathString = (string)context.Request.Environment["owin.RequestPath"];
        logger.Info(string.Format("{0}:{1}:{2}", requestMethod, requestQueryString,requestPathString));
        await Next.Invoke(context);
    }
}

并在启动配置中使用

app.Use(typeof(GetMethodMiddleware));