- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有代码将命名的 HttpClient
添加到 ServiceCollection
并将 DelegatingHandler
添加到客户端。示例代码:
public class MyDelegatingHandler : DelegatingHandler
{
// ...
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHttpClient("MyClient")
.AddHttpMessageHandler(provider => new MyDelegatingHandler());
});
在编写单元测试时,如何验证添加的DelegatingHandler
实现是MyDelegatingHanlder
?
最佳答案
此信息存储在 HttpClient
的私有(private)字段中。你可以得到它,但它有点非正统。所以,你可能感兴趣也可能不感兴趣,但我会把它扔在那里,以防你:
public static class HttpClientExtensions
{
public static bool ContainsDelegatingHandler<TDelegatingHandler>(
this HttpClient httpClient) where TDelegatingHandler: DelegatingHandler
{
if(httpClient == null)
{
throw new ArgumentNullException(nameof(httpClient));
}
var internalHandlerField = typeof(HttpMessageInvoker).GetField(
"_handler", BindingFlags.NonPublic | BindingFlags.Instance);
if(internalHandlerField == null)
{
throw new InvalidOperationException(
"_handler no longer exists as a private instance field of HttpClient");
}
// run down the chain of delegating handlers until there are no more
var delegatingHandler = internalHandlerField.GetValue(httpClient) as DelegatingHandler;
while (delegatingHandler != null)
{
if(delegatingHandler.GetType() == typeof(TDelegatingHandler))
{
return true;
}
delegatingHandler = delegatingHandler.InnerHandler as DelegatingHandler;
}
return false;
}
}
要进行测试,您首先必须使用工厂创建一个 HttpClient
:
var httpClient = httpClientFactory.CreateClient("MyClient");
然后通过扩展运行它:
if(!httpClient.ContainsDelegatingHandler<MyDelegatingHandler>())
{
throw new Exception(
"HttpClient with name 'MyClient' does not contain " +
$"{nameof(MyDelegatingHandler)} delegating handler.");
}
关于c# - 验证我的 DelegatingHandler 是否已添加到 IHttpClientBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63678810/
如何对自定义 DelegatingHandler 进行单元测试?我有以下内容,但它提示未设置 innerHandler。 var httpRequestMessage = new HttpReques
我正在尝试记录我的 Web API 项目的 HTTP 响应 header 。 本项目采用VS2012、.NET 4.5和ASP.NET MVC 4开发。 我写了一个 DelegatingHandler
我正在尝试对 DelegateHandler 的实现进行单元测试。我的简化实现: public class FooHandler : DelegatingHandler { prote
我正在尝试对 DelegateHandler 的实现进行单元测试。我的简化实现: public class FooHandler : DelegatingHandler { prote
在 ASP.NET Core 2.1 应用程序中,我使用 HttpClient 发出 REST 请求。我正在使用 DelegatingHandler 来定义一些常见行为。注册我在这里: private
我是依赖注入(inject)的新手,但对 Ninject 和 Ninject.Extensions.Logging 到 [Inject] 我的 ILogger 很满意 无论我需要什么。 但是一些Del
我目前正在使用几个委托(delegate)处理程序(派生自 DelegatingHandler 的类)在发送请求之前处理请求,例如验证签名等。这一切都非常好,因为我不' 必须对所有调用重复签名验证(例
我有代码将命名的 HttpClient 添加到 ServiceCollection 并将 DelegatingHandler 添加到客户端。示例代码: public class MyDelegatin
我正在尝试对 DelegatingHandler 使用依赖注入(inject)包含 2 个接口(interface)和 1 个字符串。 public class MessageHandler : De
DelegatingHandler继承自 HttpMessageHandler .但是,我不明白其中的区别,因为您必须实现相同的方法,SendAsync使两者都起作用。 这两个处理程序有什么区别?我应
我有以下代码,在转发到我的 localhost:1671 时工作正常: protected override async System.Threading.Tasks.Task SendAsync(H
我在类库中有一个自定义的 DelegatingHandler,我需要用 Autofac 注册它。 webapi 宿主解决了它对运行时的依赖,因此宿主没有对该库的引用。 public class Loc
在我的应用程序中,我们从客户端发送大小适中的数据包并接收大小适中的响应,因此我想在向上和返回的过程中实现一些压缩。 在回来的路上它很好,因为我可以依靠 IIS 的动态压缩来为我做这件事,但在回来的路上
在WebAPI自托管应用程序中,DelegatingHandler的SendAsync()方法和ApiController的任何方法是否总是在同一线程上执行? 使用[ThreadStatic]变量将R
我想知道是否可以在 DelegatingHandler 的 SendAsync 方法中访问正在执行(或即将执行)的 Controller ?我似乎不知道如何访问它,我认为这是因为它在 Controll
我正在尝试了解 Web API Http 管道的工作原理! 在我的 Web API 项目中,我使用以下技术来记录/处理异常: ExceptionHandler -> 在全局级别处理异常 Excepti
我正在尝试在 ASP.NET WebAPI 项目中记录整个传入请求和传出响应。虽然我同意 DelegatingHandler,但我的雇主坚持使用 HttpModule。您如何向她解释为什么我们应该使用
我有一个 MVC/Web API 混合项目,我添加了一个简单的 DelegatingHandler 实现来包装 API 响应。这很好用,但处理程序也被调用以请求 MVC Controller 。我的理
我有一个 Web API,它是一个非常薄的基础架构,只包含两个 DelegatingHandler 实现,它们将传入消息分派(dispatch)到业务层中定义的消息处理程序实现。这意味着没有 Cont
我正在阅读文章并检查示例,我发现 Owin 中间件的使用方式与 WebAPI DelegatingHandler 相同:记录传入请求、验证 header 等。 我唯一的理解是 Owin 中间件在管道中
我是一名优秀的程序员,十分优秀!