using Microsoft.AspNetCore.Http; namespace Finch.Extensions; public static class HttpContextExtensions { /// /// Whether the current request is an AJAX request /// public static bool IsAjaxRequest(this HttpContext context) { if (context?.Request?.Headers == null) { return false; } return context.Request.Headers["X-Requested-With"] == "XMLHttpRequest"; } /// /// Whether the current request only accepts application/json /// public static bool IsJsonRequest(this HttpContext context) { if (context?.Request?.Headers == null) { return false; } return context.Request.Headers["Accept"] == "application/json"; } /// /// Get IP Address of the client /// public static string GetClientIpAddress(this HttpContext context) { return context.Connection.RemoteIpAddress?.ToString(); //string ipAddress = context.GetServerVariable("HTTP_X_FORWARDED_FOR"); //return !ipAddress.IsNullOrEmpty() ? ipAddress.Split(',')[0] : context.GetServerVariable("REMOTE_ADDR"); } public static bool IsPartOfUrl(this HttpContext model, string url) { if (url.IsNullOrEmpty()) { return false; } string destination = url.EnsureStartsWith('/').TrimEnd('/'); string current = model.Request.Path.ToUriComponent().TrimEnd('/'); return current.StartsWith(destination, StringComparison.InvariantCultureIgnoreCase); } public static bool IsUrl(this HttpContext model, string url) { if (url.IsNullOrEmpty()) { return false; } string destination = url.EnsureStartsWith('/').TrimEnd('/'); string current = model.Request.Path.ToUriComponent().TrimEnd('/'); return current.Equals(destination, StringComparison.InvariantCultureIgnoreCase); } }