DelegatingHandler的旧响应,错误500

时间:2013-12-12 10:45:19

标签: asp.net http asp.net-web-api

我正在尝试将旧响应作为响应发回,并且在浏览器端出现错误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")
};

这次它运作良好。

我的方法有误吗?我的代码中有什么问题吗?

1 个答案:

答案 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);

它似乎有效。

感谢那些花时间阅读帖子的人。