我试图从HttpMessageHandler
创建派生类,就像这里一样。我一开始就犯了错,我的代码到目前为止:
public class InternetClientHandler : HttpMessageHandler
{
private readonly SocketsHttpHandler _socketsHttpHandler;
public InternetClientHandler()
{
_socketsHttpHandler = new SocketsHttpHandler();
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return _socketsHttpHandler.SendAsync(request, cancellationToken); //ERROR
}
}
这是微软的HttpClientHandler
实现的精确副本,但方法_socketsHttpHandler.SendAsync
无法编译,因为SocketsHttpHandler
的SendAsync
受到保护。为什么它在MS的代码中有效,而在我的代码中无效?这是一种扩展方法吗?如果是这样,那么为什么智能感知不提供帮助,以插入正确的使用?
1条答案
按热度按时间3ks5zfa01#
您无法访问
SocketsHttpHandler.SendAsync
,因为它被标记为protected internal
。这意味着你要么需要在同一个程序集中(即微软的代码),要么你需要从它继承。你不能继承,因为它被标记为sealed
。相反,您应该从
DelegatingHandler
继承,它 * 是 * 同一程序集的一部分,因此能够调用它。这正是为这种情况而设计的。