Obs*_*nix 8 c# owin asp.net-web-api2
我创建了一个基本的webAPI项目(检查了webAPI的空白Web项目)并将owin nuget包添加到项目中.
然后我创建了一个Logging类,并通过启动将其连接起来
using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>;
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
Debug.WriteLine("Startup Called");
var config = new HttpConfiguration();
WebApiConfig.Register(config);
appBuilder.UseWebApi(config);
appBuilder.Use(typeof(LoggingMiddleware));
}
}
public class LoggingMiddleware
{
private AppFunc Next { get; set; }
public LoggingMiddleware(AppFunc next)
{
Next = next;
}
public async Task Invoke(IDictionary<string, object> environment)
{
Debug.WriteLine("Begin Request");
await Next.Invoke(environment);
Debug.WriteLine("End Request");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行项目并打开默认页面时,我看到调用了Begin/End请求(两次,因为它发生了,不知道为什么会这样).
但是,如果我尝试调用/api路由(例如`/ api/ping /'),请求成功完成,但我没有在日志中看到Begin/End请求状态.
我错过了什么?
Obs*_*nix 17
Owin按照它们注册的顺序执行中间件项目,结束于对appBuilder.UseWebApi(config)看起来没有调用的控制器()的调用next.Invoke().鉴于在该问题的代码已经注册记录中间件类后的UseWebApi通话,这使得它永远不会被调用API请求.
将代码更改为:
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
//.....
//This must be registered first
appBuilder.Use(typeof(LoggingMiddleware));
//Register this last
appBuilder.UseWebApi(config);
}
}
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.
| 归档时间: |
|
| 查看次数: |
2098 次 |
| 最近记录: |