gpt4 book ai didi

c# - 未在 api 请求上调用中间件类

转载 作者:太空狗 更新时间:2023-10-29 18:13:10 25 4
gpt4 key购买 nike

我创建了一个基本的 webAPI 项目(选中 webAPI 的空白 web 项目)并将 owin nuget 包添加到该项目。

  • Microsoft.AspNet.WebApi.Owin
  • Microsoft.Owin.Host.SystemWeb
  • 欧文

然后我创建了一个 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");
}
}

当我运行项目并打开默认页面时,我看到调用了 Begin/End 请求(碰巧调用了两次,不确定为什么会这样)。

但是,如果我尝试调用 /api 路由(例如 `/api/ping/'),请求会成功完成,但我看不到 Begin/End 请求状态日志。

我错过了什么?

最佳答案

Owin 按照注册的顺序执行中间件项,在调用 Controller (appBuilder.UseWebApi(config)) 时结束,它似乎没有调用 next.Invoke ()。鉴于问题中的代码在 UseWebApi 调用之后 注册了 Logging Middleware 类,这导致它永远不会为 API 请求调用。

将代码更改为:

public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
//.....

//This must be registered first
appBuilder.Use(typeof(LoggingMiddleware));

//Register this last
appBuilder.UseWebApi(config);
}
}

解决问题。

关于c# - 未在 api 请求上调用中间件类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32605667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com