C# 未在api请求上调用中间件类
我创建了一个基本的webAPI项目(选中webAPI的空白web项目),并将owin nuget包添加到该项目中C# 未在api请求上调用中间件类,c#,asp.net-web-api2,owin,C#,Asp.net Web Api2,Owin,我创建了一个基本的webAPI项目(选中webAPI的空白web项目),并将owin nuget包添加到该项目中 Microsoft.AspNet.WebApi.Owin Microsoft.Owin.Host.SystemWeb 奥温 然后我创建了一个日志类,并通过startup将其连接起来 using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.
- Microsoft.AspNet.WebApi.Owin
- Microsoft.Owin.Host.SystemWeb
- 奥温
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");
}
}
使用AppFunc=System.Func;
公营创业
{
公共无效配置(IAppBuilder appBuilder)
{
Debug.WriteLine(“启动调用”);
var config=新的HttpConfiguration();
WebApiConfig.Register(配置);
appBuilder.UseWebApi(配置);
appBuilder.Use(typeof(logging中间件));
}
}
公共类日志中间件
{
私有AppFunc Next{get;set;}
公共日志中间件(AppFunc next)
{
下一个=下一个;
}
公共异步任务调用(IDictionary环境)
{
Debug.WriteLine(“开始请求”);
等待下一步。调用(环境);
Debug.WriteLine(“结束请求”);
}
}
当我运行项目时,默认页面打开,我看到开始/结束请求被调用(发生两次,不知道为什么)
但是,如果我尝试调用/api
路由(例如“/api/ping/”),请求将成功完成,但在日志中看不到开始/结束请求状态
我缺少什么?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);
}
}
解决问题。已保存日期!!:D> 它似乎不调用next.Invoke()uhhh为什么不呢??来吧,微软。。。