使用我的自定义OWIN中间件,我想捕获GET请求以向查询字符串添加参数。
我不知道我是否正确,但实际上我是这样做的:
context.Request.QueryString = new QueryString(context.Request.QueryString.ToString() + "param=value")
但我也希望该请求的IIS日志记录文件条目是更新的请求,而不是原始请求。
原始日志:
2015-07-22 09:32:35 :: 1 GET /img.gif - 56782 - :: 1 Mozilla / 5.0 +(Windows + NT + 6.3; + WOW64; + Trident / 7.0; + rv:11.0 )+喜欢+ Gecko - 200 0 0 102891
预期日志:
2015-07-22 09:32:35 :: 1 GET /img.gif param = value 56782 - :: 1 Mozilla / 5.0 +(Windows + NT + 6.3; + WOW64; + Trident / 7.0; + rv :11.0)+喜欢+ Gecko - 200 0 0 102891
我该怎么做?
答案 0 :(得分:0)
对我来说,更好的选择是创建自己的文件日志,而不是基于外部日志(在本例中为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));