2013-12-12 3 views
0

Я пытаюсь отправить обратно в ответ старый ответ, и это терпит неудачу с ошибкой 500 на стороне браузера:старый ответ с DelegatingHandler, ошибка 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

Хорошо, я выяснил проблему: 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); 

и это похоже на работу.

Спасибо за тех, кто нашел время, чтобы прочитать сообщение.

Смежные вопросы