using System; using System.Collections.Generic; using System.Text; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Primitives; namespace TEAMModelOS.SDK.Extension { public static class HttpContextExtensions { /// /// 取得驗證金鑰,Authorization /// public static string GetToken(this HttpContext httpContext) { return httpContext.Request.Headers["Authorization"].ToString(); } /// /// 取得JWT驗證金鑰,Authorization Bearer /// /// /// public static string GetJwtToken(this HttpContext httpContext) { var token = string.Empty; string authorization = httpContext.Request.Headers["Authorization"].ToString(); if (!string.IsNullOrWhiteSpace(authorization) && authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { token = authorization.Substring("Bearer ".Length).Trim(); } return token; } /// /// 取得遠端呼叫的IP /// public static string GetRemoteIP(this HttpContext httpContext) { return httpContext?.Connection?.RemoteIpAddress?.ToString(); } /// /// 取得X-Auth-Key值 /// /// Key Name /// public static string GetXAuth(this HttpContext httpContext, string key = null) { try { if (httpContext.Request.Headers.TryGetValue($"X-Auth-{key}", out StringValues value)) return value.ToString(); else return null; } catch { return null; } } /// /// 取得AuthToken權杖資訊 /// /// Key Name /// public static (string id, string name, string picture, string school) GetAuthTokenInfo(this HttpContext httpContext, string key = null) { object id = null, name = null, picture = null, school = null; httpContext?.Items.TryGetValue("ID", out id); httpContext?.Items.TryGetValue("Name", out name); httpContext?.Items.TryGetValue("Picture", out picture); httpContext?.Items.TryGetValue("School", out school); return (id?.ToString(), name?.ToString(), picture?.ToString(), school?.ToString()); } /// /// 取得User-Agent值 /// public static string GetUserAgent(this HttpContext httpContext) { try { return httpContext.Request.Headers["User-Agent"].ToString(); } catch { return null; } } /// /// 取得Scheme值 /// public static string GetScheme(this HttpContext httpContext) { return httpContext?.Request?.Scheme; } /// /// 取得HostName值 /// public static string GetHostName(this HttpContext httpContext) { return httpContext?.Request?.Host.ToString(); } /// /// 设置本地cookie /// /// 键 /// 值 /// 过期时长,单位:分钟 public static void SetCookies(HttpResponse Response, string key, string value, int minutes = 30) { Response.Cookies.Append(key, value, new CookieOptions { Expires = DateTimeOffset.Now.AddMinutes(minutes) }); } /// /// 删除指定的cookie /// /// 键 public static void DeleteCookies(HttpContext httpContext, string key) { httpContext.Response.Cookies.Delete(key); } } }