问题标签 [delegatinghandler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
78 浏览

asp.net-core - 用于处理 IdentityServer 端点请求的 .NET Core 消息处理程序

我目前正在开发一个使用 Identity Server 4 进行身份验证的项目。为此,我有服务器项目。除了获取令牌之外,我还在该服务器上创建了用于用户管理的端点。因此,当我从不同的项目访问这些用户端点时,我的 API 在哪里,我必须使用令牌。我的想法是为这些请求添加消息处理程序,但我的问题是消息处理程序使用从同一身份服务器获取令牌的方法。我发现了这个: https ://vmsdurano.com/apiboilerplate-and-identityserver4-access-control-for-apis/ 但它不适合我,因为我需要做这样的事情:

services.AddHttpClient<IAuthServerConnect, AuthServerConnect>() .AddHttpMessageHandler<ProtectedApiBearerTokenHandler>();

处理此类请求的最佳方法是什么?如何将消息处理程序添加到服务器本身?

谢谢您的帮助。

0 投票
0 回答
94 浏览

xamarin - 我是否需要第二个 HttpClient 来进行 API 调用以刷新自定义 DelegatingHandler 中的 JWT 令牌?

对于我的应用程序中的每个 API 调用,我想检查用户是否有过期的 JWT,如果是,我想使用刷新令牌获取一个新的,然后继续对 API 的原始请求。这应该全部在后台工作,APP用户不会遇到任何中断或需要再次登录。

我像这样创建我的 HttpClient:

AuthenticationHandler 是一个自定义的 DelegatingHandler,它有一个覆盖SendAsync方法。在该方法中,我检查请求是否具有状态Unauthorised

如果是这样,我需要使用当前拥有的 JWT 和 Refresh 令牌向我的 API 发送另一个请求以生成新的令牌对......因为这是另一个 API 调用中间的 API 调用(因为这一切都发生在内部自定义 DelegatingHandler 是构造我的主 HttpClient 的参数) - 是否需要使用我需要创建的第二个 HttpClient 来刷新令牌以进行刷新令牌调用?

我看不出如何为此使用相同的 HttpClient,这通常是如何完成的?


编辑:

我看不到如何从 AuthenticationHandler 内部使用相同的 HttpClient 进行 refreshToken 调用,因为处理程序用于构造 HttpClient。感觉像是循环引用。我只是不知道其他人如何在他们的代码中做到这一点......我目前通过使用第二个 HttpClient 来实现它,我只用于那个refreshToken调用,它可以工作,但我觉得有一种更清洁的方法来实现这个?

顺便说一句,我(尚未重构) AuthenticationHandler 中的 SendAsync 方法目前看起来像这样:

0 投票
0 回答
69 浏览

c# - 使用关联的 DelegatingHandler 处理 HttpClient

您好,我正在使用IHttpClientFactorywithDI来创建 附加HttpClient了自定义的实例。DelegatingHandler这些处理程序包含应处置的资源。就我而言,它们包含一个Pollypolicy 。

使用其委托处理程序处置此类 HttpClient 实例的正确方法是什么?

Http 委托处理程序

HttpClient 创建

0 投票
1 回答
60 浏览

c# - Polly“重试”在第一次失败重试尝试时抛出 TaskCanceledException

DelegateHandler我已经在写入 .NET Standard 2.0 的 dll 中实现了 Polly 在它自己的“重试”HttpClient中。我有 Polly v7.2.3 包。MyHttpClient与 an 分开运行,HttpClientFactory因为在 dll 的短暂生命周期内只有一个实例会存在。

我的问题是:当我的互联网工作时,代码执行得很好。但是,当我断开互联网连接时,它会TaskCanceledException在第一次重试时抛出一个并且不再重试。这是我的代码的相关部分...

在我输入的 HttpClient 的 ctor 中:

在我的重试委托处理程序中:

所以我在这里对 SO 进行了研究,发现了这个非常有希望Dispose的解释和解决方案,建议我调用结果。 HttpClient Polly WaitAndRetry 策略

这是我使用该解决方案的更新代码。调用WaitAndRetryAsync抱怨它无法解析该OnRetry方法,因为它正在寻找“Action<Exception, TimeSpan>”

DelegateResult<HttpResponseMessage>不幸的是,我使用的 Polly 版本不支持参数。所有onRetry支持都期望第一个参数是“异常”。Dispose如果我无法接触到一次性物品,我会在使用该溶液时死在水中。

更新:我希望能够Dispose()从其他 StackOverflow 反馈中调用以影响修复。但我不能,因为该onRetry方法不支持同一组参数(即“响应”对象)。Polly API 似乎发生了变化。如果是这样,那么获得响应访问权限的新方法是Dispose什么?或者有没有其他方法可以解决我遇到的错误?

所以我被困在试图让这个解决方案工作或寻找另一种方法来解决这个异常。我欢迎任何有关如何指定要处理的对象的反馈。也欢迎替代方法。