如何更改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日志)。例如,您可以使用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));