【发布时间】:2013-12-23 18:03:09
【问题描述】:
我正在尝试实现登录到我的 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);
}
}
然后我在 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);
}
}
当我删除 builder.Use<HostingMiddleware>(builder); 时,我可以发出 HTTP 请求并获得响应,但是当我实现 Middleware 类时,我得到:
No WebSocket support detected, Windows 8 or later is required.
从那里开始,日志记录无法正常工作。当然有一种方法可以让日志记录在 Windows 7 环境中工作,否则该功能会变得毫无用处?关于我需要做什么的任何想法?
提前致谢。
【问题讨论】:
-
当我在不使用 WebAPI 的情况下通过一个简单示例进行尝试时,无法重现此问题。您确定您的请求没有由 WebApi 处理并且直到 HostingMiddleware 才到达?或者您是否打算让这个 HostingMiddleware 实际上记录到这个 WebAPI 的每个请求并添加一个响应标头 - 如果是这样,请尝试在 UseWebApi(config) 之前注册中间件。
-
一个错误的地方是“return Invoke(context);”这只会导致同一个调用一遍又一遍的巨大循环。
标签: c# owin self-hosting katana