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环境中的日志记录工作,否则功能会变得毫无用处?关于我需要做什么的任何想法?
提前致谢.
你需要使用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和中间件管道