/// <summary> /// Content-Type から charset を取得し、<see cref="Encoding"/>として返す /// </summary> /// <param name="headers">HTTP ヘッダー</param> /// <returns>charset から作成された<see cref="Encoding"/></returns> private static Encoding GetCharset(this IReadOnlyHttpHeaders headers) { if (!headers.HasHeader("Content-Type")) { return(null); } var charset = headers.GetFirstValue("Content-Type") .ToLower() .Split(';') .Select(x => x.Trim()) .FirstOrDefault(x => x.StartsWith("charset=")) ?.Split('=') .Last(); if (string.IsNullOrWhiteSpace(charset)) { return(null); } try { var e = Encoding.GetEncoding(charset); return(e); } catch (ArgumentException) { return(null); } }
/// <summary> /// 指定された名前のヘッダーの値のリストを取得 /// </summary> /// <param name="headers">HTTP ヘッダー</param> /// <param name="name">ヘッダー名</param> /// <returns>ヘッダー値のリスト</returns> public static IReadOnlyList <string> GetValues(this IReadOnlyHttpHeaders headers, string name) => ApplicationLayer.Entities.Http.HttpHeadersExtensions.GetValues(headers, name);
/// <summary> /// 指定された名前のヘッダーの最初の値を取得 /// </summary> /// <param name="headers">HTTP ヘッダー</param> /// <param name="name">ヘッダー名</param> /// <returns>最初のヘッダー値</returns> public static string GetFirstValue(this IReadOnlyHttpHeaders headers, string name) => ApplicationLayer.Entities.Http.HttpHeadersExtensions.GetFirstValue(headers, name);
/// <summary> /// 指定された名前のヘッダーを持つかどうか /// </summary> /// <param name="headers">HTTP ヘッダー</param> /// <param name="name">ヘッダー名</param> /// <returns>指定された名前のヘッダーを持つかどうか</returns> public static bool HasHeader(this IReadOnlyHttpHeaders headers, string name) => ApplicationLayer.Entities.Http.HttpHeadersExtensions.HasHeader(headers, name);