diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2013-02-09 23:35:41 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2013-02-09 23:35:41 -0800 |
commit | bfb7f04a6c71b54b27763eccf69c3d26c0764272 (patch) | |
tree | 13fab874e73a1cf753abcbf1e2d2f40a84bfdc82 /src/DotNetOpenAuth.Core/Messaging/Channel.cs | |
parent | 9a0f8c7233f2f42653a9d38255a32f79e34fa985 (diff) | |
download | DotNetOpenAuth-bfb7f04a6c71b54b27763eccf69c3d26c0764272.zip DotNetOpenAuth-bfb7f04a6c71b54b27763eccf69c3d26c0764272.tar.gz DotNetOpenAuth-bfb7f04a6c71b54b27763eccf69c3d26c0764272.tar.bz2 |
Fixes OAuthConsumer twitter sample.
Diffstat (limited to 'src/DotNetOpenAuth.Core/Messaging/Channel.cs')
-rw-r--r-- | src/DotNetOpenAuth.Core/Messaging/Channel.cs | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/src/DotNetOpenAuth.Core/Messaging/Channel.cs b/src/DotNetOpenAuth.Core/Messaging/Channel.cs index 359257c..5420e5f 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Channel.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Channel.cs @@ -280,7 +280,7 @@ namespace DotNetOpenAuth.Messaging { /// </summary> /// <param name="message">The one-way message to send</param> /// <returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns> - public async Task<HttpResponseMessage> PrepareResponseAsync(IProtocolMessage message, CancellationToken cancellationToken) { + public async Task<HttpResponseMessage> PrepareResponseAsync(IProtocolMessage message, CancellationToken cancellationToken = default(CancellationToken)) { Requires.NotNull(message, "message"); await this.ProcessOutgoingMessageAsync(message, cancellationToken); @@ -664,38 +664,42 @@ namespace DotNetOpenAuth.Messaging { } } - IDictionary<string, string> responseFields; - IDirectResponseProtocolMessage responseMessage; - - using (var httpClient = this.HostFactories.CreateHttpClient()) { - try { - using (HttpResponseMessage response = await httpClient.SendAsync(webRequest, cancellationToken)) { - response.EnsureSuccessStatusCode(); - if (response.Content == null) { - return null; - } - - responseFields = await this.ReadFromResponseCoreAsync(response); - if (responseFields == null) { - return null; - } - - responseMessage = this.MessageFactory.GetNewResponseMessage(request, responseFields); - if (responseMessage == null) { - return null; + try { + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var response = await httpClient.SendAsync(webRequest, cancellationToken)) { + if (response.IsSuccessStatusCode) { + if (response.Content == null) { + return null; + } + + var responseFields = await this.ReadFromResponseCoreAsync(response); + if (responseFields == null) { + return null; + } + + var responseMessage = this.MessageFactory.GetNewResponseMessage(request, responseFields); + if (responseMessage == null) { + return null; + } + + this.OnReceivingDirectResponse(response, responseMessage); + + var messageAccessor = this.MessageDescriptions.GetAccessor(responseMessage); + messageAccessor.Deserialize(responseFields); + + return responseMessage; + } else { + var errorContent = await response.Content.ReadAsStringAsync(); + Logger.Http.ErrorFormat( + "Error received in HTTP response: {0} {1}\n{2}", (int)response.StatusCode, response.ReasonPhrase, errorContent); + response.EnsureSuccessStatusCode(); // throw so we can wrap it in our catch block. + throw Assumes.NotReachable(); } - - this.OnReceivingDirectResponse(response, responseMessage); } - } catch (HttpRequestException ex) { - throw ErrorUtilities.Wrap(ex, "Error sending HTTP request or receiving response."); } + } catch (HttpRequestException requestException) { + throw ErrorUtilities.Wrap(requestException, "Error sending HTTP request or receiving response."); } - - var messageAccessor = this.MessageDescriptions.GetAccessor(responseMessage); - messageAccessor.Deserialize(responseFields); - - return responseMessage; } protected virtual HttpMessageHandler WrapMessageHandler(HttpMessageHandler innerHandler) { |