diff --git a/VAR.WebFormsCore/Code/Bundler.cs b/VAR.WebFormsCore/Code/Bundler.cs index 180e2c7..3b8a253 100644 --- a/VAR.WebFormsCore/Code/Bundler.cs +++ b/VAR.WebFormsCore/Code/Bundler.cs @@ -70,34 +70,27 @@ namespace VAR.WebFormsCore.Code #region Public methods - public void WriteResponse(HttpResponse response, string contentType) + private static Encoding _utf8Econding = new UTF8Encoding(); + + public async void WriteResponse(HttpResponse response, string contentType) { + StringWriter textWriter = new StringWriter(); response.ContentType = contentType; foreach (string fileName in AssemblyFiles) { Stream resourceStream = _assembly.GetManifestResourceStream(fileName); string fileContent = new StreamReader(resourceStream).ReadToEnd(); - byte[] byteArray = Encoding.UTF8.GetBytes(fileContent); - if (byteArray.Length > 0) - { - response.Body.Write(byteArray, 0, byteArray.Length); - - byteArray = Encoding.UTF8.GetBytes("\n\n"); - response.Body.Write(byteArray, 0, byteArray.Length); - } + textWriter.Write(fileContent); + textWriter.Write("\n\n"); } foreach (string fileName in AbsoluteFiles) { string fileContent = File.ReadAllText(fileName); - byte[] byteArray = Encoding.UTF8.GetBytes(fileContent); - if (byteArray.Length > 0) - { - response.Body.Write(byteArray, 0, byteArray.Length); - - byteArray = Encoding.UTF8.GetBytes("\n\n"); - response.Body.Write(byteArray, 0, byteArray.Length); - } + textWriter.Write(fileContent); + textWriter.Write("\n\n"); } + byte[] byteObject = _utf8Econding.GetBytes(textWriter.ToString()); + await response.Body.WriteAsync(byteObject); } #endregion Public methods diff --git a/VAR.WebFormsCore/Code/ExtensionMethods.cs b/VAR.WebFormsCore/Code/ExtensionMethods.cs index 12238ad..e1327be 100644 --- a/VAR.WebFormsCore/Code/ExtensionMethods.cs +++ b/VAR.WebFormsCore/Code/ExtensionMethods.cs @@ -1,4 +1,5 @@ using System; +using System.Text; using Microsoft.AspNetCore.Http; using VAR.Json; @@ -30,11 +31,14 @@ namespace VAR.WebFormsCore.Code return string.Empty; } + private static Encoding _utf8Econding = new UTF8Encoding(); + public static void ResponseObject(this HttpContext context, object obj) { context.Response.ContentType = "text/json"; string strObject = JsonWriter.WriteObject(obj); - context.Response.WriteAsync(strObject); + byte[] byteObject = _utf8Econding.GetBytes(strObject); + context.Response.Body.WriteAsync(byteObject); } public static void PrepareCacheableResponse(this HttpResponse response) diff --git a/VAR.WebFormsCore/Code/GlobalRouterMiddleware.cs b/VAR.WebFormsCore/Code/GlobalRouterMiddleware.cs index 484b935..10c91fa 100644 --- a/VAR.WebFormsCore/Code/GlobalRouterMiddleware.cs +++ b/VAR.WebFormsCore/Code/GlobalRouterMiddleware.cs @@ -22,7 +22,7 @@ namespace VAR.WebFormsCore.Code ServerHelpers.SetContentRoot(env.ContentRootPath); } - public Task Invoke(HttpContext httpContext) + public async Task Invoke(HttpContext httpContext) { httpContext.Response.Headers.Remove("Server"); httpContext.Response.Headers.Remove("X-Powered-By"); @@ -36,16 +36,23 @@ namespace VAR.WebFormsCore.Code } catch (Exception ex) { - if (ex is ThreadAbortException) + if (IsIgnoreException(ex) == false) { - return null; + GlobalErrorHandler.HandleError(httpContext, ex); } - GlobalErrorHandler.HandleError(httpContext, ex); } - return null; + await httpContext.Response.Body.FlushAsync(); } + private static bool IsIgnoreException(Exception ex) + { + if (ex is ThreadAbortException) + { + return true; + } + return false; + } private void RouteRequest(HttpContext context) { diff --git a/VAR.WebFormsCore/Code/StaticFileHelper.cs b/VAR.WebFormsCore/Code/StaticFileHelper.cs index ac6070a..73c6ce4 100644 --- a/VAR.WebFormsCore/Code/StaticFileHelper.cs +++ b/VAR.WebFormsCore/Code/StaticFileHelper.cs @@ -66,7 +66,7 @@ namespace VAR.WebFormsCore.Code {".7z", "application/x-7z-compressed"}, }; - public static void ResponseStaticFile(HttpContext context, string filePath) + public static async void ResponseStaticFile(HttpContext context, string filePath) { string extension = Path.GetExtension(filePath).ToLower(); string contentType = null; @@ -75,21 +75,14 @@ namespace VAR.WebFormsCore.Code contentType = _mimeTypeByExtension[extension]; } - //context.Response.Clear(); - if (string.IsNullOrEmpty(contentType) == false) { context.Response.ContentType = contentType; } context.Response.PrepareCacheableResponse(); - //context.Response.Buffer = true; - //context.Response.WriteFile(filePath); - //context.Response.Flush(); - //context.Response.Close(); - //context.Response.End(); byte[] fileData = File.ReadAllBytes(filePath); - context.Response.Body.Write(fileData); + await context.Response.Body.WriteAsync(fileData); } } diff --git a/VAR.WebFormsCore/Pages/Page.cs b/VAR.WebFormsCore/Pages/Page.cs index 033fce2..87938cd 100644 --- a/VAR.WebFormsCore/Pages/Page.cs +++ b/VAR.WebFormsCore/Pages/Page.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.IO; +using System.Text; using Microsoft.AspNetCore.Http; using VAR.WebFormsCore.Code; using VAR.WebFormsCore.Controls; @@ -12,7 +13,9 @@ namespace VAR.WebFormsCore.Pages public HttpContext Context { get; set; } - public void ProcessRequest(HttpContext context) + private static Encoding _utf8Econding = new UTF8Encoding(); + + public async void ProcessRequest(HttpContext context) { StringWriter stringWriter = new(); @@ -54,7 +57,8 @@ namespace VAR.WebFormsCore.Pages if (context.Response.HasStarted) { return; } context.Response.Headers.Add("Content-Type", "text/html"); - Context.Response.WriteAsync(stringWriter.ToString()); + byte[] byteObject = _utf8Econding.GetBytes(stringWriter.ToString()); + await context.Response.Body.WriteAsync(byteObject); } private bool _isPostBack = false;