gpt4 book ai didi

c# - 'DelegatingHandler' 列表无效,因为 'InnerHandler' 的属性 'handler' 不为空

转载 作者:行者123 更新时间:2023-11-30 23:16:43 25 4
gpt4 key购买 nike

我有一个自定义消息处理程序,我按如下方式在全局添加:

public class CustomerHandler : DelegatingHandler
{
public CustomHandler(HttpConfiguration httpConfiguration)
{
InnerHandler = new HttpControllerDispatcher(httpConfiguration);
}
}

config.MessageHandlers.Add(new CustomHandler(config));

但是,我收到以下错误:

The 'DelegatingHandler' list is invalid because the property 'InnerHandler' of 'CustomHandler' is not null. Parametername: handlers

所以我把代码改成了:

config.MessageHandlers.Add(new CustomHandler(config) { InnerHandler = null });

我得到一个错误:

ArgumentNullException

当我将处理程序添加到单个路由时,它工作正常。

var customHandler = new CustomHandler(config);

config.Routes.MapHttpRoute(
name: "default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" },
handler: customHandler
);

因此当 Innerhandler 设置正确或为 null 时它总是抛出异常。

我错过了什么?

编辑

此自定义处理程序用于检查请求中是否包含特定 header ,如果找到,则从内存缓存中获取用户详细信息。从处理程序更改为模块是否更有意义?

最佳答案

在多个 HttpClientFactory.Create 调用中重复使用相同的 DelegatingHandler 实例时出现此错误。

var loggingClient = HttpClientFactory.Create(loggingHandler);
var authHandler = new AuthenticatingHandler(loggingClient);

var client = HttpClientFactory.Create(authHandler, loggingHandler);

第一次调用 HttpClientFactory.Create 会在 loggingHandler 实例上设置 InnerHandler 属性。然后第二次调用抛出这个错误。

解决方案是使用相同类型的处理程序的新实例

var loggingClient = HttpClientFactory.Create(new LoggingHandler());
var authHandler = new AuthenticatingHandler(loggingClient);

var client = HttpClientFactory.Create(authHandler, new LoggingHandler());

关于c# - 'DelegatingHandler' 列表无效,因为 'InnerHandler' 的属性 'handler' 不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889742/

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