我正在尝试将旧响应作为响应发回,并且在浏览器端出现错误500失败:
public class MyDelegatingHandler : DelegatingHandler
{
[...]
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
[...]
// I basically tried:
var response = oldResponse;
// I also trying :
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = oldResponse.Content
};
// response is sent back
var tsc = new TaskCompletionSource<HttpResponseMessage>();
tsc.SetResult(response);
return tsc.Task;
}
}
我也试过这个基本的例子:
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent("Hello")
};
这次它运作良好。
我的方法有误吗?我的代码中有什么问题吗?
答案 0 :(得分:0)
好的,我发现了问题:HttpResponseMessage及其内容在消耗完后就会被处理掉。这就是为什么它不能使用两次。
所以我尝试用这种方式重建HttpResponseMessage:
object contentValue = null;
// Should be surrounded with if to check whether extraction succeded of course :-)
cachedResponse.TryGetContentValue(out contentValue);
var response = request.CreateResponse(contentValue);
它似乎有效。
感谢那些花时间阅读帖子的人。