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;
}
}