如何在Windows 7上启用OWIN日志记录

Luk*_*ley 4 c# self-hosting owin katana

我正在尝试实现登录到我的OWIN自托管解决方案.

我的MiddleWare班级如下:

public class HostingMiddleware : OwinMiddleware
{
    private readonly ILogger _logger;

    public HostingMiddleware(OwinMiddleware next, IAppBuilder builder)
        : base(next)
    {
        _logger = builder.CreateLogger<HostingMiddleware>();
    }

    public override Task Invoke(IOwinContext context)
    {
        _logger.WriteVerbose(string.Format("{0} {1}: {2}"));
        context.Response.Headers.Add("Content-Type", new[] 
                                                     { 
                                                        "text/plain"
                                                     });
        return Invoke(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在Startup课堂上使用它.

public class Startup
{
   public void Configuration(IAppBuilder builder)
   {
      // Initialize the configuration for Web API self-host.
      HttpConfiguration config = new HttpConfiguration();

      // Map the default Web API HTTP Route
      config.Routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );

      // Use Web API
      builder.UseWebApi(config);

      builder.Use<HostingMiddleware>(builder);
   }
}
Run Code Online (Sandbox Code Playgroud)

当我删除时,builder.Use<HostingMiddleware>(builder);我可以发出HTTP请求并获得响应,但是当我实现我的Middleware类时,我得到:

No WebSocket support detected, Windows 8 or later is required.

从那里开始,日志记录不能正常工作.当然有一种方法可以让Windows 7环境中的日志记录工作,否则功能会变得毫无用处?关于我需要做什么的任何想法?

提前致谢.

Ein*_*hen 5

你需要使用Next.Invoke(context)而不是你在做什么.

你在日志记录中也有一个"bug" - 我不知道你想记录什么 - 我添加了自己的.

祝你好运 - 我喜欢它.


public class HostingMiddleware : OwinMiddleware
{
    private readonly ILogger _logger;

    public HostingMiddleware(OwinMiddleware next, IAppBuilder builder)
        : base(next)
    {
        _logger = builder.CreateLogger();
    }

    public async override Task Invoke(IOwinContext context)
    {
        _logger.WriteVerbose(string.Format("{0} --- {1}", context.Request.Uri.AbsolutePath, context.Request.QueryString);
        await Next.Invoke(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

你必须阅读:理解OWIN,Katana和中间件管道