VAR.WebFormsCore: Use Async IO

This commit is contained in:
2021-06-29 08:25:47 +02:00
parent d0f30af288
commit fcddf7b647
5 changed files with 35 additions and 34 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
{

View File

@@ -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);
}
}

View File

@@ -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;