如何更改IIS

时间:2015-07-22 09:51:09

标签: c# .net iis owin

使用我的自定义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

我该怎么做?

1 个答案:

答案 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));