diff --git a/Source/SuperSimple.MiniWebServer/Environment.cs b/Source/SuperSimple.MiniWebServer/Environment.cs index 9406edb..86c8bbe 100644 --- a/Source/SuperSimple.MiniWebServer/Environment.cs +++ b/Source/SuperSimple.MiniWebServer/Environment.cs @@ -1,52 +1,69 @@ -namespace SuperSimple.MiniWebServer +namespace SuperSimple.MiniWebServer { using System.Collections.Generic; using System.IO; using System.Text; - using System.Threading.Tasks; - - public class Environment : WrappedDictionary, IDictionary - { - private RequestHeaders requestHeaders; - private ResponseHeaders responseHeaders; - - public Stream RequestBody => this["owin.RequestBody"] as Stream; - - public RequestHeaders RequestHeaders - { - get - { - if (requestHeaders == null) - requestHeaders = new RequestHeaders((IDictionary)this["owin.RequestHeaders"]); - - return requestHeaders; - } - } - public string RequestMethod => (string)this["owin.RequestMethod"]; - public string RequestPath => (string)this["owin.RequestPath"]; - public string RequestPathBase => (string)this["owin.RequestPathBase"]; - public string RequestQueryString => (string)this["owin.RequestQueryString"]; - - public Stream ResponseBody => (Stream)this["owin.ResponseBody"]; - public ResponseHeaders ResponseHeaders => - responseHeaders ?? (responseHeaders = new ResponseHeaders((IDictionary) this["owin.ResponseHeaders"])); - - public int ResponseStatusCode - { - get => (int)this["owin.ResponseStatusCode"]; - set => this["owin.ResponseStatusCode"] = value; - } - - internal Environment(IDictionary environment) - : base(environment) - { } - - public async Task WriteResponseWithCount(string response) - { - var data = Encoding.UTF8.GetBytes(response); - - await ResponseBody.WriteAsync(data, 0, data.Length); - ResponseHeaders.ContentLength = data.Length; - } - } -} + using System.Threading.Tasks; + using SuperSimple.MiniWebServer.MiddleWare; + + public class Environment : WrappedDictionary, IDictionary + { + private RequestHeaders requestHeaders; + private ResponseHeaders responseHeaders; + + public Stream RequestBody => this["owin.RequestBody"] as Stream; + + public RequestHeaders RequestHeaders + { + get + { + if (requestHeaders == null) + requestHeaders = new RequestHeaders((IDictionary)this["owin.RequestHeaders"]); + + return requestHeaders; + } + } + public string RequestMethod => (string)this["owin.RequestMethod"]; + public string RequestPath => (string)this["owin.RequestPath"]; + public string RequestPathBase => (string)this["owin.RequestPathBase"]; + public string RequestQueryString => (string)this["owin.RequestQueryString"]; + + public string _requestContent = null; + public string RequestContent + { + get + { + if (_requestContent == null && RequestBody != null) + { + var contentBytes = RequestBody.ReadAllBytes().Result; + if (contentBytes != null) + _requestContent = Encoding.UTF8.GetString(contentBytes); + } + + return _requestContent; + } + } + + public Stream ResponseBody => (Stream)this["owin.ResponseBody"]; + public ResponseHeaders ResponseHeaders => + responseHeaders ?? (responseHeaders = new ResponseHeaders((IDictionary) this["owin.ResponseHeaders"])); + + public int ResponseStatusCode + { + get => (int)this["owin.ResponseStatusCode"]; + set => this["owin.ResponseStatusCode"] = value; + } + + internal Environment(IDictionary environment) + : base(environment) + { } + + public async Task WriteResponseWithCount(string response) + { + var data = Encoding.UTF8.GetBytes(response); + + await ResponseBody.WriteAsync(data, 0, data.Length); + ResponseHeaders.ContentLength = data.Length; + } + } +} diff --git a/Source/SuperSimple.MiniWebServer/Request.cs b/Source/SuperSimple.MiniWebServer/Request.cs index d250cb6..0ea4ce7 100644 --- a/Source/SuperSimple.MiniWebServer/Request.cs +++ b/Source/SuperSimple.MiniWebServer/Request.cs @@ -1,10 +1,8 @@ namespace SuperSimple.MiniWebServer { using System; - using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; - using SuperSimple.MiniWebServer.MiddleWare; public class Request : IEquatable { @@ -26,18 +24,7 @@ public Request(string method, string path, string pathBase = null, string queryS public T GetContentAs() => JsonConvert.DeserializeObject(Content); public static async Task FromEnvironment(Environment env) - { - string content = null; - - if (env.RequestBody != null) - { - var contentBytes = await env.RequestBody.ReadAllBytes(); - if (contentBytes != null) - content = Encoding.UTF8.GetString(contentBytes); - } - - return new Request(env.RequestMethod, env.RequestPath, env.RequestPathBase, env.RequestQueryString, content); - } + => new Request(env.RequestMethod, env.RequestPath, env.RequestPathBase, env.RequestQueryString, env.RequestContent); public static bool operator !=(Request left, Request right) => !(left == right); public static bool operator ==(Request left, Request right)