public IActionResult GetModConfig(string modDllName) { var modConfig = GetModAppConfig(modDllName); if (modConfig == null) { return(NotFound()); } var modConfigFile = Path.Combine(EmpyrionConfiguration.SaveGameModPath, modConfig.Current.ModConfigFile); if (!System.IO.File.Exists(modConfigFile)) { return(NotFound()); } DateTimeOffset?LastModified = new DateTimeOffset(System.IO.File.GetLastWriteTime(modConfigFile)); return(PhysicalFile( modConfigFile, "application/" + Path.GetExtension(modConfigFile).Substring(1).ToLower(), Path.GetFileName(modConfigFile), LastModified, new Microsoft.Net.Http.Headers.EntityTagHeaderValue("\"" + ETagGenerator.GetETag(modConfigFile, System.IO.File.ReadAllBytes(modConfigFile)) + "\""), true )); }
public IActionResult GetPlayfieldMap(string aPlayfieldname) { if (!Directory.Exists(MapsPath)) { return(NotFound()); } if (PlayfieldManager.Playfields == null) { PlayfieldManager.ReadPlayfields(); } var PlayfieldMap = Path.Combine( EmpyrionConfiguration.SaveGameModPath, "EWA", "Maps", aPlayfieldname, "map.png"); if (!System.IO.File.Exists(PlayfieldMap) && PlayfieldManager.Playfields == null) { return(NotFound()); } var CurrentPlayfield = PlayfieldManager.Playfields.FirstOrDefault(P => P.name == aPlayfieldname); if (!System.IO.File.Exists(PlayfieldMap) && (CurrentPlayfield == null || CurrentPlayfield.isPlanet)) { return(NotFound()); } if (!CurrentPlayfield.isPlanet && (!System.IO.File.Exists(PlayfieldMap) || (DateTime.Now - System.IO.File.GetLastWriteTime(PlayfieldMap)).TotalDays > 1)) { try { ReadFromHubbleImages(PlayfieldMap); } catch (Exception Error) { Logger.LogError(Error, "LoadSpace: {0} to {1}", aPlayfieldname, PlayfieldMap); PlayfieldMap = Path.Combine(EmpyrionConfiguration.ModPath, @"EWALoader\EWA\ClientApp\dist\ClientApp\empty.png"); } } DateTimeOffset?LastModified = new DateTimeOffset(System.IO.File.GetLastWriteTime(PlayfieldMap)); return(PhysicalFile( PlayfieldMap, "image/png", aPlayfieldname + ".png", LastModified, new Microsoft.Net.Http.Headers.EntityTagHeaderValue("\"" + ETagGenerator.GetETag(PlayfieldMap, System.IO.File.ReadAllBytes(PlayfieldMap)) + "\""), true )); }
public void OnActionExecuted(ActionExecutedContext context) { if (context.HttpContext.Request.Method == "GET") { if (_statusCodes.Contains(context.HttpContext.Response.StatusCode)) { //I just serialize the result to JSON, could do something less costly var content = JsonConvert.SerializeObject(context.Result); var etag = ETagGenerator.GetETag(context.HttpContext.Request.Path.ToString(), Encoding.UTF8.GetBytes(content)); if (context.HttpContext.Request.Headers.Keys.Contains("If-None-Match") && context.HttpContext.Request.Headers["If-None-Match"].ToString() == etag) { context.Result = new StatusCodeResult(304); } context.HttpContext.Response.Headers.Add("ETag", new[] { etag }); } } }
private IActionResult GetImage(ImageType type, Guid userId, string name, string v) { string baseUrl = Constants.DefaultCdnPath; name = name.Replace(Constants.DefaultImagePath, string.Empty); try { string storageBasePath = FormatBasePath(type, userId, baseUrl); string url = UrlFormatter.CdnCommon(userId, name); if (!string.IsNullOrWhiteSpace(v)) { url += "?v=" + v; } byte[] data; using (WebClient webClient = new WebClient()) { data = webClient.DownloadData(url); } string etag = ETagGenerator.GetETag(httpContextAccessor.HttpContext.Request.Path.ToString(), data); if (httpContextAccessor.HttpContext.Request.Headers.Keys.Contains(HeaderNames.IfNoneMatch) && httpContextAccessor.HttpContext.Request.Headers[HeaderNames.IfNoneMatch].ToString() == etag) { return(new StatusCodeResult(StatusCodes.Status304NotModified)); } httpContextAccessor.HttpContext.Response.Headers.Add(HeaderNames.ETag, new[] { etag }); return(File(new MemoryStream(data), "image/jpeg")); } catch (Exception ex) { string msg = $"Unable to save get the Image."; logger.Log(LogLevel.Error, ex, msg); return(ReturnDefaultImage(type)); } }