小编nem*_*mui的帖子

在 ASP.NET Core 中,Delegate 如何转换为 RequestDelegate?

我查看了MapGet()正在执行的操作,发现其中一个重载采用类型Delegate(类,不是关键字,也不是RequestDelegate),但随后将其传递给MapMethods(),后者采用RequestDelegate. 我觉得非常令人困惑的是这个演员阵容是如何发生的。ARequestDelegate有签名delegate Task RequestDelegate(HttpContext httpContext)。当将一个委托转换为另一个委托时,他们不是a)需要相同的签名,b)实际上需要传递对Invoke()委托方法的引用(也就是说,你不能只将一个委托转换为另一个委托,而不管它们的签名)匹配,或者我是这么读的)。

我发现极其令人困惑的另一件事是如何将任意请求处理程序传递给 Minimal API,并以某种方式将其转换为RequestDelegate. Microsoft 的文档显示了处理程序没有诸如 之类的参数的示例() => ...,以及将通过诸如 之类的依赖注入机制解析的任意参数(MyClass a, HttpContext ctx, DbContext<MyClass> dbCtx) => ...。我假设这个处理程序以某种方式包装在另一个适合签名的 lambda 中RequestDelegate,以便 ASP.NET Core 可以传入 a HttpContext,然后包装 lambda 可以分析开发人员传入的 lambda 并决定如何解决其依赖关系等。但我完全不知道这是在哪里或如何发生的。它实际上只是接受一个 Delegate 并将其传递给另一个接受 的方法RequestDelegate,神奇的是它现在是一个有效的RequestDelegate?

有谁知道?

c# asp.net-web-api asp.net-core

12
推荐指数
1
解决办法
3927
查看次数

标签 统计

asp.net-core ×1

asp.net-web-api ×1

c# ×1