private static bool TryHandleStatic([NotNull] this GameHttpContext context, [NotNull] string path)
        {
            if (!File.Exists(path))
            {
                return(false);
            }
            var contentType           = TryGetContentType(path);
            var lastWriteTimeUtc      = File.GetLastWriteTimeUtc(path).ToString("R");
            var ifModifiedSinceString = context.Request.Headers["If-Modified-Since"];

            if (!string.IsNullOrEmpty(ifModifiedSinceString))
            {
                DateTime ifModifiedSince;
                if (DateTime.TryParseExact(ifModifiedSinceString, "R", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out ifModifiedSince))
                {
                    if (ifModifiedSince.ToUniversalTime().ToString("R") == lastWriteTimeUtc)
                    {
                        context.Response.StatusCode = (int)HttpStatusCode.NotModified;
                        return(true);
                    }
                }
            }
            context.Response.AppendHeader("Cache-Control", "public");
            context.Response.AppendHeader("Last-Modified", lastWriteTimeUtc);
            context.SendResponseRaw(File.ReadAllBytes(path), contentType);
            return(true);
        }
        public static void SendResponse <T>([NotNull] this GameHttpContext context, T value, HttpStatusCode statusCode = HttpStatusCode.OK)
        {
            context.Response.StatusCode = (int)statusCode;
            var result = JsonSerializer.Serialize(value);

            context.SendResponseRaw(result, "application/json; charset=utf-8");
        }
 public static void SendResponseRaw([NotNull] this GameHttpContext context, [CanBeNull] object value, string contentType = null)
 {
     if (!ReferenceEquals(value, null))
     {
         var memoryStream = new MemoryStream();
         var writer       = new StreamWriter(memoryStream);
         writer.Write(value);
         writer.Flush();
         context.SendResponseRaw(memoryStream.ToArray(), contentType);
     }
 }
 public static void SendResponseString([NotNull] this GameHttpContext context, [CanBeNull] string value)
 {
     if (!string.IsNullOrEmpty(value))
     {
         var memoryStream = new MemoryStream();
         var writer       = new StreamWriter(memoryStream);
         writer.Write(value);
         writer.Flush();
         context.SendResponseRaw(memoryStream.ToArray(), "text/plain; charset=utf-8");
     }
 }