首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的函数应用程序启动时注入的DelegatingHandler上的SendAsync永远不会被调用?

问题:为什么我的函数应用程序启动时注入的DelegatingHandler上的SendAsync永远不会被调用?

答案: 出现这种情况可能是由于以下几个原因导致的:

  1. 配置错误:首先,需要确保DelegatingHandler已经被正确配置和注入到函数应用程序中。检查是否正确配置了依赖注入容器,例如ASP.NET Core中的IServiceCollection和Startup.ConfigureServices方法。
  2. 请求未到达DelegatingHandler:DelegatingHandler在处理请求的管道中的位置很重要。如果DelegatingHandler在管道中的较低位置,而请求被其他中间件或过滤器拦截或处理了,那么DelegatingHandler的SendAsync方法将不会被调用。需要确保请求流经了DelegatingHandler。
  3. 没有调用基类的SendAsync方法:在自定义的DelegatingHandler的SendAsync方法中,需要确保调用基类的SendAsync方法以确保请求能够继续向下传递给下一个DelegatingHandler或最终的请求处理器。如果没有调用基类的SendAsync方法,请求将无法正常传递,导致DelegatingHandler上的SendAsync永远不会被调用。
  4. 异步等待问题:如果在自定义的DelegatingHandler的SendAsync方法中使用了异步等待操作,但没有正确等待异步操作完成,可能会导致问题。确保在使用异步操作时正确使用await关键字等待操作完成。
  5. 请求被终止或异常终止:在请求处理过程中,如果请求被终止或异常终止,那么后续的DelegatingHandler的SendAsync方法将不会被调用。可以检查请求是否被意外中断,例如通过检查日志或使用调试器进行调试来解决这个问题。

总结起来,要解决DelegatingHandler上的SendAsync方法永远不被调用的问题,需要确保DelegatingHandler正确配置和注入,正确处理请求的管道顺序,调用基类的SendAsync方法,正确等待异步操作完成,并检查是否存在请求被中断或异常终止的情况。此外,如果问题仍然存在,可以进一步检查函数应用程序的配置和日志以获取更多的调试信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.net core HttpClient 使用之消息管道解析(二)

,HttpMessageHandler 是由MessageHandler 链表结构组成,形成一个消息管道模式;具体我们一起来看看源代码 2.2 Demo代码演示 再阅读源代码的时候我们先来看下下面注入HttpClient...不错,这两个方法就是扩展注册自定义的HttpMessageHandler 如果不注册,会有默认的HttpMessageHandler,接下来我们分别来看下提供的扩展方法,如下图: 图中提供了一系列的AddHttpMessageHandler...到这里源代码已经分析完了,接下来我们来演示一个Demo,来证明上面的核心HttpMessageHandler 流程走向图 三、Demo演示证明 我们继续来看上面我的Demo代码: services.AddHttpClient...四、总结 HttpClient中HttpMessageHandler可以自定义多个,但是只能有一个PrimaryHttpMessageHandler如果添加多个只会被最后面添加的给覆盖;添加的一系列Handler...使用场景:我们可以通过自定义的MessageHandler 来动态加载请求证书,通过数据库的一些信息,在自定义的Handler 中加载注入对应的证书,这样可以起到动态加载支付证书作用,同时可以SendAsync

69110
  • 在.NET 6 中如何创建和使用 HTTP 客户端 SDK

    在这篇文章中,我将分享在.NET 6 中创建和使用 HTTP 客户端 SDK 的方方面面。 客户端 SDK 在远程服务之上提供了一个有意义的抽象层。本质上,它允许进行远程过程调用(RPC)。...这种考虑也带来了一个重要的问题——“我应该在每次需要时创建 HttpClient,还是只在应用程序启动时创建一次?” HttpClient 是一个共享对象。这就意味着,在底层,它是可重入和线程安全的。...2 消费 API 客户端 在我们的例子中,消费 API 的一个基本场景是无依赖注入容器的控制台应用程序。这里的目标是让消费者以最快的方式来访问已有的 API。...在最坏的情况下,调用者的资源可能会被耗尽或过分阻塞,等待永远不会到来的回复,导致上游发生了级联故障。这就是断路器模式发挥作用的时候了。它检测故障等级,并在故障超过阈值时阻止对下游服务的调用。...不需要额外的单元测试。 缺点➖: 故障排查困难。有时候很难理解生成的代码是如何工作的。例如,在配置上存在不匹配。 需要团队其他成员了解如何阅读和编写使用 Refit 开发的代码。

    12.6K20

    .NET Core 3.0深入源码理解HttpClientFactory之实战

    详细介绍 以下代码参考了MSDN,因为代码里展示的GitHub接口确实可以调通,省的我再写一个接口出来测试了。...重试功能除了可以使用Polly实现外,还可以使用DelegatingHandler,DelegatingHandler继承自HttpMessageHandler,用于”处理请求、响应回复“,本质上就是一组...此处主要展示DelegatingHandler的使用方式,在实际使用中,仍然建议使用Polly重试。...HttpClient日志记录与追踪链 日志记录这块与追踪链,我们一般会通过request.Header实现,而在微服务中,十分关注相关调用方的信息及其获取,一般的做法是通过增加请求Id的方式来确定请求及其相关日志信息...,我决定要展示一下,供大家选择: 1: public class CorrelationIdDelegatingHandler : DelegatingHandler 2: { 3

    1.2K20

    .NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?

    奇怪的问题 最近在公司有个系统需要调用第三方的一个webservice。本来调用一个下很简单的事情,使用HttpClient构造一个SOAP请求发送出去拿到XML解析就是了。...可奇怪的是我们的请求在运行一段时间后就会被服务器504给拒绝掉了。导致系统无法使用,用户叫苦连天。...postman测试一测就测出问题了,不管发送什么,服务器全部给出了504的响应。因为在浏览器里访问webservice的首页是可以的,但是为什么在postman上面就不行了呢?...于是在服务器上安装fiddler,把请求通过fiddler代理转发出去,然后监控http请求的头部。当系统再次出现问题的时候 果断上去查看fiddler。...很快在.net core runtime的github上的issues发现一个同样的问题: HttpClient automatically adds Request-Id HTTP header

    1.2K10

    HttpClientFactory日志不好用,自己扩展一个?

    ② 若是微服务/ 分布式调用,可能还有 将本次HttpClient调用日志与后置api日志 结合分析的需求, 这个日志也支持不了。...因此本文打算重新构建 HttpClientFactory日志:给某次请求的全部日志设置TraceId 结合我给出的典型用法来看IHttpClientFactory组件原理: ?...给出手绘的UML类图: ? 本次要扩展的入口便是IHttpMessageHandlerFilter接口,核心是自定义DelegatingHandler日志处理器。...,参考了我前一篇博文《被忽略的TraceId,可以用起来了》的思路,为每次HttpClient调用过程设定 全局唯一的GUID标记, 后置api服务可酌情修改以上代码处理。》...Tip ① 这个TraceId 可以使用你业务上独具一格的标记,这样在排查时, 能根据上游业务更好的追踪日志。

    1.5K10

    跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?

    在实现的SendAsync方法中,当CorsRequestContext根据表示当前请求的HttpRequestMessage对象创建之后,会根据其IsPreflight属性选择调用方法HandleCorsPreflightRequestAsync...具体来说,如果预检请求通过了授权检验,一个状态为“200, OK”的HttpResponseMessage会被创建出来,通过CorsResult得到CORS响应报头会被添加到这个HttpResponseMessage...在这之后,我们调用HttpConfiguration对象的另一个扩展方法GetCorsEngine得到注册其上的CorsEngine,并将此前得到的CorsRequestContext和CorsPolicy...如果现在运行ASP.NET MVC程序,通过调用Web API以跨域Ajax请求得到的联系人列表依然会显示在浏览器上。...对象会被创建出来并注册到HttpConfiguration上。

    2.5K110

    使用 MiniProfiler 来分析 ASP.NET Core 应用

    而状态码只有response返回之后才有,所以在using语句里调用CustomTiming()方法时,我暂时把第二个命令设置为空字符串。 运行程序,可以看到弹出窗口的右侧出现了http这一列: ?...如果需要分析所有的HttpClient的请求,那么你可以在Http管道里放一个DelegatingHandler,具体说就是创建一个类,继承于DelegatingHandler,只需要重写一个叫做SendAsync...这部分代码我先不写,以后再说。 而如果不是HttpClient的请求,那么你可以自己写一个Wrapper或通过装饰者设计模式来实现。。。...什么也没有,这时因为我还没有调用任何API,接下来就调用一个API,然后再查看该页面: ? 这个页面自动刷新了,出现了刚才调用API的结果。可以看到总时间为3066毫秒。...ResultsAuthorize的参数是一个Func,参数是HttpRequest,返回类型为bool,在这里你就可以写一个函数来判断用户的身份。返回true就代表用户有权限。

    1.5K40

    web安全防御之RASP技术

    它是一种新型应用安全保护技术,它将保护程序像疫苗一样注入到应用程序中,应用程序融为一体,它拦截从应用程序到系统的所有调用,能实时检测和阻断安全攻击,使应用程序具备自我保护能力,当应用程序遭受到实际攻击伤害...2.RASP启动流程 a.启动时首先会进入 javaagent 的 premain 函数,该函数会在 main 函数之前预先执行。...图8 上面过程主要是利用注入点在原始的sql语句综合的中间或后面"插入"、"拼接"上攻击性的sql payload,从而达到提取非法数据等目的。如图9所示的 paylad。...,因为攻击者在子句中利用逻辑表达式进行非法的探测注入,该语句就不会被执行。 ...图23 2.OpenRASP攻击检测流程 在进入到被hook类的函数时,调用事先注入的检测函数,最终调用pluginCheck函数。

    5.7K31

    【愚公系列】2023年02月 .NET CORE工具案例-FastEndpoints轻量级WebApi框架

    的依赖注入 1.定义服务 2.注入服务 3.使用 3.1 构造函数注入 3.2 属性注入 3.3 手动注入 ---- 前言 1.FastEndpoints介绍 FastEndpoints是Minimal...API 端点是非常独立的,每个端点都可以使用三个组件来描述: 请求:终结点所需的数据形状 终结点:终结点在给定请求时执行的逻辑 响应:终结点返回给调用方的响应 结合这三个元素,你会得到请求-端点-...响应或 REPR 模式,我称之为“收割者”。...并非所有终结点都需要其请求或响应的实际数据,在某些情况下,不接收任何输入或仅返回 HTTP 状态代码。但是,在此模式中,空请求或响应仍然是有效的请求或响应,就像某些 MVC 操作不需要模型一样。...; } 2.注入服务 builder.Services.AddScoped(); 3.使用 3.1 构造函数注入 1、代码

    71210

    启动优化(一)

    我讨论了main函数之前的启动时间的测量以及优化方案,接下来就来讨论下main函数以及main函数之后的启动时间的测量以及优化方案。...此时如果有多个应用程序执行,那么所有执行的应用程序就都会被计算机从磁盘加载进内存中,而这多个应用程序的可执行文件在内存中是一次自上而下排列的,如下图: ?...从上图中可以看到,一个应用程序的虚拟内存空间是连续的,但是对应的物理内存空间有可能是不连续的。 实际上这就解决了只使用物理内存的安全问题。...所以为了节省映射表,它也不可能以字节为单位,实际上,映射表是以页为单位的,在Linux、MacOS上一页是4KB ,在iOS上一页是16KB。这也是为什么映射表也被称为页面。 ?...,因为他可以直接通过地址来访问到你的函数,进而Hook住该函数实行静态注入。

    96341

    eShopOnContainers 知多少:Ocelot gateways

    引言 客户端与微服务的通信问题永远是一个绕不开的问题,对于小型微服务应用,客户端与微服务可以使用直连的方式进行通信,但对于对于大型的微服务应用我们将不得不面对以下问题: 如何降低客户端到后台的请求数量,...Hello Ocelot 关于Ocelot,张队在Github上贴心的整理了awesome-ocelot系列以便于我们学习。这里就简单介绍下Ocelot,不过多展开。...JsonConvert.DeserializeObject(data) : null; return basket; } } 代码中主要是通过构造函数注入...直接看代码实现: public class HttpClientAuthorizationDelegatingHandler : DelegatingHandler { private...仅需在ReRoute节点下配置RouteClaimsRequirement即可: "RouteClaimsRequirement": { "UserType": "employee" } 在该示例中,当调用授权中间件时

    90651

    揭秘Windows10 UWP中的httpclient接口

    现在就比较好理解为什么会有两个相似APIs了,也了解怎么在二者之间进行选择,下面进一步了解这两个对象模型。...如果你想修改默认一些设置,比如缓存行为,自动压缩,证书或代理,可以直接创建一个HttpClientHandler实例,修改它的属性,把它当做HttpClient构造函数的参数传入。...这就可以使用自定义处理器类来完成,它从DelegatingHandler派生出,例如CustomHandler1,然后创建一个新实例,把它传入HttpClient构造函数。...DelegatingHandler类的InnerHandler属性被用指定下一个处理器,比如,可以添加个新的自定处理器(例CustomHandler2)到处理链上。...从目前开始,我尝试继续添加一些高级请求特性,比如自定义服务器ssl证书的生效,在所有的地方都能添加处理器/过滤器到HttpClient对象上。

    1.5K40

    揭秘Windows10 UWP中的httpclient接口

    现在就比较好理解为什么会有两个相似APIs了,也了解怎么在二者之间进行选择,下面进一步了解这两个对象模型。...如果你想修改默认一些设置,比如缓存行为,自动压缩,证书或代理,可以直接创建一个HttpClientHandler实例,修改它的属性,把它当做HttpClient构造函数的参数传入。...这就可以使用自定义处理器类来完成,它从DelegatingHandler派生出,例如CustomHandler1,然后创建一个新实例,把它传入HttpClient构造函数。...DelegatingHandler类的InnerHandler属性被用指定下一个处理器,比如,可以添加个新的自定处理器(例CustomHandler2)到处理链上。...从目前开始,我尝试继续添加一些高级请求特性,比如自定义服务器ssl证书的生效,在所有的地方都能添加处理器/过滤器到HttpClient对象上。

    1.4K30

    一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

    到这我们可以看出: ApplicationReadyEvent 当且仅当 在应用程序就绪之后才被触发,甚至是说上面的 Listener 要在本文说的所有解决方案都执行了之后才会被触发,最终结论请稍后看...相反,它将在依赖于它的所有 bean 被初始化之后被调用,如果要添加人为的依赖关系并由此创建一个排序,则可以使用 @DependsOn 注解(虽然可以排序,但是不建议使用,理由和 @Order 一样)...如果我们在某些属性上使用 @Autowired(常规操作应该使用构造函数注入),那么 Spring 将在调用afterPropertiesSet 之前将 bean 注入这些属性。...@Autowired 字段,则 @PostConstruct 方法可能会遇到 NullPointerExceptions 小结 如果我们使用构造函数注入,则这两种解决方案都是等效的 ---- 源码分析...为什么不建议 @Autowired 形式依赖注入 在写 Spring Bean 生命周期时就有朋友问我与之相关的问题,显然他们在概念上有一些含混,所以,仔细理解上面的问题将会帮助你加深对 Spring

    1.9K20

    HttpClientFactory的套路,你知多少?

    替换的初衷还是简单摆一下: ① using(var client = new HttpClient()) 调用的 Dispose() 方法并不会立即释放底层 Socket 连接,新建 Socket 需要时间...由 DI 框架注入 IHttpClientFactory 工厂;由工厂创建 HttpClient 并从内部的 Handler 池分配请求 Handler。...我一直对这种颠覆传统 HttpClient 的代码组织方式感到好奇,今天我们带着问题来探究一下新版 HttpClient 的实现。...总结 伪代码演示实例创建过程: DefaultHttpClientFactory.CreateClient() --->构造函数由 DI 注入默认的 LoggingHttpMessageHandlerBuilderFilter...--->返回一个基础、HttpHandler 均正确配置的 HttpClient 实例 上述行为依赖于 ASP.NETCor 框架在 DI 阶段注入的几个服务: DefaultHttpClientFactory

    1.4K30

    通过扩展让ASP.NET Web API支持W3C的CORS规范

    ——CorsMessageHandler 针对跨域资源共享的实现最终体现在具有如下定义的CorsMessageHandler类型上,它直接继承自DelegatingHandler。...在实现的SendAsync方法中,CorsMessageHandler利用应用在目标Action方法或者HttpController类型上CorsAttribute来对请求实施授权检验,最终将生成的CORS...在得到描述目标Action的HttpActionDescriptor对象后,我们调用其GetCustomAttributes方法得到应用在Action方法上的CorsAttribute特性。...如果这样的特性不存在,在调用同名方法得到应用在HttpController类型上的CorsAttribute特性。...对于非预检请求来说(可能是简单跨域资源请求,也可能是继预检请求之后发送的真正的跨域资源请求),我们调用基类的SendAsync方法将请求交付给后续的HttpMessageHandler进行处理并最终得到最终的响应

    2.4K90
    领券