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