summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.Core
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth.Core')
-rw-r--r--src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs28
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();
+ }
+ }
+ }
}
}