From 724897d0ebd5bbf81886b2f47034adfe5c94ee9a Mon Sep 17 00:00:00 2001 From: David Fowler Date: Sun, 26 Jan 2014 03:44:21 -0800 Subject: [PATCH] Added super hacky RawOwinHttpContext for K profile. --- HttpAbstractions.sln | 7 + ...Context.cs => MicrosoftOwinHttpContext.cs} | 8 +- .../OwinExtensions.cs | 6 +- .../RawOwinHttpContext.cs | 199 ++++++++++++++++++ .../project.json | 10 +- 5 files changed, 222 insertions(+), 8 deletions(-) rename src/Microsoft.AspNet.Abstractions.Owin/{OwinHttpContext.cs => MicrosoftOwinHttpContext.cs} (96%) create mode 100644 src/Microsoft.AspNet.Abstractions.Owin/RawOwinHttpContext.cs diff --git a/HttpAbstractions.sln b/HttpAbstractions.sln index d5bb318867..a2737cba10 100644 --- a/HttpAbstractions.sln +++ b/HttpAbstractions.sln @@ -29,6 +29,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.PipelineCo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Abstractions.Owin.net45", "src\Microsoft.AspNet.Abstractions.Owin\Microsoft.AspNet.Abstractions.Owin.net45.csproj", "{E6B7056F-547E-4B96-9E58-858DDDAE75D3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Abstractions.Owin.k10", "src\Microsoft.AspNet.Abstractions.Owin\Microsoft.AspNet.Abstractions.Owin.k10.csproj", "{C5C104A4-EE38-4D77-AC77-DF599FD5443A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -79,6 +81,10 @@ Global {E6B7056F-547E-4B96-9E58-858DDDAE75D3}.Debug|Any CPU.Build.0 = Debug|Any CPU {E6B7056F-547E-4B96-9E58-858DDDAE75D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {E6B7056F-547E-4B96-9E58-858DDDAE75D3}.Release|Any CPU.Build.0 = Release|Any CPU + {C5C104A4-EE38-4D77-AC77-DF599FD5443A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5C104A4-EE38-4D77-AC77-DF599FD5443A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5C104A4-EE38-4D77-AC77-DF599FD5443A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5C104A4-EE38-4D77-AC77-DF599FD5443A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -95,5 +101,6 @@ Global {E31CF247-FDA9-4007-B194-A7DBAC18532C} = {D38DDB2B-1138-4F45-8A6A-9499E880F620} {659F2FD7-D44F-4953-A69D-94AF3D41BA21} = {D38DDB2B-1138-4F45-8A6A-9499E880F620} {E6B7056F-547E-4B96-9E58-858DDDAE75D3} = {D38DDB2B-1138-4F45-8A6A-9499E880F620} + {C5C104A4-EE38-4D77-AC77-DF599FD5443A} = {D38DDB2B-1138-4F45-8A6A-9499E880F620} EndGlobalSection EndGlobal diff --git a/src/Microsoft.AspNet.Abstractions.Owin/OwinHttpContext.cs b/src/Microsoft.AspNet.Abstractions.Owin/MicrosoftOwinHttpContext.cs similarity index 96% rename from src/Microsoft.AspNet.Abstractions.Owin/OwinHttpContext.cs rename to src/Microsoft.AspNet.Abstractions.Owin/MicrosoftOwinHttpContext.cs index 2762319fcd..c648b66a55 100644 --- a/src/Microsoft.AspNet.Abstractions.Owin/OwinHttpContext.cs +++ b/src/Microsoft.AspNet.Abstractions.Owin/MicrosoftOwinHttpContext.cs @@ -1,4 +1,5 @@ -using System; +#if NET45 +using System; using System.IO; using System.Threading.Tasks; using Microsoft.AspNet.Abstractions; @@ -6,13 +7,13 @@ using Microsoft.Owin; namespace Microsoft.AspNet.Abstractions.Owin { - public class OwinHttpContext : HttpContext + public class MicrosoftOwinHttpContext : HttpContext { private readonly IOwinContext _context; private readonly HttpRequest _request; private readonly HttpResponse _response; - public OwinHttpContext(IOwinContext context) + public MicrosoftOwinHttpContext(IOwinContext context) { _context = context; _request = new OwinHttpRequest(this, context.Request); @@ -173,3 +174,4 @@ namespace Microsoft.AspNet.Abstractions.Owin } } } +#endif \ No newline at end of file diff --git a/src/Microsoft.AspNet.Abstractions.Owin/OwinExtensions.cs b/src/Microsoft.AspNet.Abstractions.Owin/OwinExtensions.cs index e203fdd00e..87788e5f93 100644 --- a/src/Microsoft.AspNet.Abstractions.Owin/OwinExtensions.cs +++ b/src/Microsoft.AspNet.Abstractions.Owin/OwinExtensions.cs @@ -1,4 +1,5 @@ -using System; +#if NET45 +using System; using System.Threading.Tasks; using Microsoft.AspNet.Abstractions; using Microsoft.AspNet.Abstractions.Owin; @@ -11,10 +12,11 @@ namespace Owin { app.Run(context => { - var httpContext = new OwinHttpContext(context); + var httpContext = new MicrosoftOwinHttpContext(context); return handler(httpContext); }); } } } +#endif \ No newline at end of file diff --git a/src/Microsoft.AspNet.Abstractions.Owin/RawOwinHttpContext.cs b/src/Microsoft.AspNet.Abstractions.Owin/RawOwinHttpContext.cs new file mode 100644 index 0000000000..69ea2e695b --- /dev/null +++ b/src/Microsoft.AspNet.Abstractions.Owin/RawOwinHttpContext.cs @@ -0,0 +1,199 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.AspNet.Abstractions.Owin +{ + public class RawOwinHttpContext : HttpContext + { + private readonly HttpRequest _request; + private readonly HttpResponse _response; + + public RawOwinHttpContext(IDictionary env) + { + _request = new RawOwinHttpRequest(this, env); + _response = new RawOwinHttpResponse(this, env); + } + + public override void Dispose() + { + + } + + public override object GetInterface(Type type) + { + return null; + } + + public override HttpRequest Request + { + get { return _request; } + } + + public override HttpResponse Response + { + get { return _response; } + } + + public override void SetInterface(Type type, object instance) + { + + } + + private class RawOwinHttpRequest : HttpRequest + { + private HttpContext _context; + private readonly IDictionary _env; + + public RawOwinHttpRequest(HttpContext context, IDictionary env) + { + _context = context; + _env = env; + } + + public override Stream Body + { + get + { + return (Stream)_env["owin.ResponseBody"]; + } + set + { + _env["owin.ResponseBody"] = value; + } + } + + public override HttpContext HttpContext + { + get { return _context; } + } + + public override PathString Path + { + get + { + return new PathString((string)_env["owin.RequestPath"]); + } + set + { + _env["owin.RequestPath"] = value.Value; + } + } + + public override PathString PathBase + { + get + { + return new PathString((string)_env["owin.RequestPathBase"]); + } + set + { + _env["owin.RequestPathBase"] = value.Value; + } + } + + public override QueryString QueryString + { + get + { + return new QueryString((string)_env["owin.RequestQueryString"]); + } + set + { + _env["owin.RequestQueryString"] = value.Value; + } + } + + public override Uri Uri + { + get + { + // TODO: Implement this sometime + throw new NotImplementedException(); + } + } + } + + private class RawOwinHttpResponse : HttpResponse + { + private readonly HttpContext _context; + private readonly IDictionary _env; + + public RawOwinHttpResponse(HttpContext context, IDictionary env) + { + _context = context; + _env = env; + } + + public override Stream Body + { + get + { + return (Stream)_env["owin.ResponseBody"]; + } + set + { + _env["owin.ResponseBody"] = value; + } + } + + public override string ContentType + { + get + { + return GetHeader("Content-Type"); + } + set + { + SetHeader("Content-Type", value); + } + } + + public override HttpContext HttpContext + { + get { return _context; } + } + + public override int StatusCode + { + get + { + return (int)_env["owin.ResponseStatusCode"]; + } + set + { + _env["owin.ResponseStatusCode"] = value; + } + } + + public override Task WriteAsync(string data) + { + var bytes = Encoding.UTF8.GetBytes(data); + + return Body.WriteAsync(bytes, 0, bytes.Length); + } + + private void SetHeader(string name, string value) + { + var headers = (IDictionary)_env["owin.ResponseHeaders"]; + + headers[name] = new[] { value }; + } + + private string GetHeader(string name) + { + var headers = (IDictionary)_env["owin.ResponseHeaders"]; + + string[] values; + if (headers.TryGetValue(name, out values) && values.Length > 0) + { + return values[0]; + } + + return null; + } + } + } +} diff --git a/src/Microsoft.AspNet.Abstractions.Owin/project.json b/src/Microsoft.AspNet.Abstractions.Owin/project.json index b2b9a4babd..991e11d3d8 100644 --- a/src/Microsoft.AspNet.Abstractions.Owin/project.json +++ b/src/Microsoft.AspNet.Abstractions.Owin/project.json @@ -1,11 +1,15 @@ { "version": "0.1-alpha-*", "dependencies": { - "Owin": "1.0", - "Microsoft.Owin": "2.1.0", "Microsoft.AspNet.Abstractions": "" }, "configurations": { - "net45": { } + "net45": { + "dependencies": { + "Owin": "1.0", + "Microsoft.Owin": "2.1.0" + } + }, + "k10": {} } } \ No newline at end of file