diff options
Diffstat (limited to 'src/DotNetOpenAuth.Core')
-rw-r--r-- | src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs index 267b003..9aee0e3 100644 --- a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs +++ b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs @@ -378,6 +378,11 @@ namespace DotNetOpenAuth.Messaging { return GetPublicFacingUrl(request, request.ServerVariables); } + public static ActionResult AsActionResult(this HttpResponseMessage response) { + Requires.NotNull(response, "response"); + return new HttpResponseMessageActionResult(response); + } + internal static void DisposeIfNotNull(this IDisposable disposable) { if (disposable != null) { disposable.Dispose(); @@ -1962,5 +1967,28 @@ namespace DotNetOpenAuth.Messaging { #endregion } + + private class HttpResponseMessageActionResult : ActionResult { + private readonly HttpResponseMessage response; + + internal HttpResponseMessageActionResult(HttpResponseMessage response) { + Requires.NotNull(response, "response"); + this.response = response; + } + + public override void ExecuteResult(ControllerContext context) { + context.HttpContext.Response.StatusCode = (int)this.response.StatusCode; + context.HttpContext.Response.Status = this.response.ReasonPhrase; + foreach (var header in this.response.Headers) { + foreach (var value in header.Value) { + context.HttpContext.Response.AddHeader(header.Key, value); + } + } + + if (this.response.Content != null) { + this.response.Content.CopyToAsync(context.HttpContext.Response.OutputStream).Wait(); + } + } + } } } |