C# WebApi委托处理程序-访问HttpRequestMessage

C# WebApi委托处理程序-访问HttpRequestMessage,c#,asp.net-web-api,C#,Asp.net Web Api,我正在使用以下代码: protected override async System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { UriBuilder forwardUri = new UriBuilder(request.RequestUri);

我正在使用以下代码:

protected override async System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
    UriBuilder forwardUri = new UriBuilder(request.RequestUri);
    //remove the proxy port and replace with an Http port
    forwardUri.Port = 1671;
    //send it on to the requested URL
    request.RequestUri = forwardUri.Uri;
    HttpClient client = new HttpClient();
    if (request.Method == HttpMethod.Get)
        request.Content = null;
    try
    {

        var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
        if (response.StatusCode == HttpStatusCode.OK)
        {
            ManageOnline(response.RequestMessage);
        }
        return response;
    }
    catch (Exception ex)
    {
        throw;
    }
}
我收到一个请求。Content.ReadAsStringAsync()引发了一个类型为“System.ObjectDisposedException”的异常。

但是,如果我运行
ManageOnline(response.RequestMessage)
var response=wait client.sendaync(请求,HttpCompletionOption.ResponseHeadersRead)之前它可以工作

有没有办法克服这个问题


非常感谢

我不明白:
…如果我在此之前运行它,它就可以运行了
。在失败的代码中,如果我运行
ManageOnline(response.RequestMessage),则在
request.Content.ReadAsStringAsync
之前调用
SendAsync
var response=wait client.sendaync(请求,HttpCompletionOption.ResponseHeadersRead)之前它可以工作。在调用您的
SendAsync(request,cancellationToken)
成员后,
request
对象会被处理掉。换句话说,问题可能出在调用第一个代码段的代码中。@Sjips没错,这就是问题所在。所以我的问题是如何避免这种情况。是否有保留请求的方法?肤浅的复制品之类的。。谢谢,这有助于我理解这个问题。您是否有一行,例如
request.Dispose()在您的呼叫代码中?这应该被删除。
private void ManageOnline(HttpRequestMessage request)
{
    switch (request.RequestUri.PathAndQuery)
    {
        case @"/token":
            {
                //let's get Content Body contents here
                string jsonContent = request.Content.ReadAsStringAsync().Result;
                _cacheHandler.AddUser(jsonContent);
                break;
            }
        default:
            break;
    }
}