using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using XFEExtension.NetCore.TaskExtension; namespace XFEExtension.NetCore.WebExtension; /// /// 网络拓展 /// public static class WebExtension { /// /// 从URL获取字符串内容 /// /// /// public static async Task GetFromUrlAsync(this string url) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException($"“{nameof(url)}”不能为 null 或空。", nameof(url)); } using var httpClient = new HttpClient(); var response = await httpClient.GetAsync(url); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsStringAsync(); } return null; } /// /// 从URL获取字符串内容 /// /// /// public static string? GetFromUrl(this string url) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException($"“{nameof(url)}”不能为 null 或空。", nameof(url)); } using var httpClient = new HttpClient(); var response = httpClient.GetAsync(url).WaitAndGetResult(); if (response.IsSuccessStatusCode) { return response.Content.ReadAsStringAsync().Result; } return null; } /// /// 从URL获取字符串内容 /// /// /// POST的内容 /// public static async Task PostToUrlAsync(this string url, string content) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException($"“{nameof(url)}”不能为 null 或空。", nameof(url)); } using var httpClient = new HttpClient(); var response = await httpClient.PostAsync(url, new StringContent(content)); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsStringAsync(); } return null; } /// /// 从URL获取字符串内容 /// /// /// POST的内容 /// public static string? PostToUrl(this string url, string content) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException($"“{nameof(url)}”不能为 null 或空。", nameof(url)); } using var httpClient = new HttpClient(); var response = httpClient.PostAsync(url, new StringContent(content)).WaitAndGetResult(); if (response.IsSuccessStatusCode) { return response.Content.ReadAsStringAsync().Result; } return null; } /// /// 从URL获取字符串内容 /// /// /// POST的内容 /// POST的类型 /// public static async Task PostToUrlAsync(this string url, string content, string contentType) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException($"“{nameof(url)}”不能为 null 或空。", nameof(url)); } using var httpClient = new HttpClient(); var response = await httpClient.PostAsync(url, new StringContent(content, Encoding.UTF8, contentType)); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsStringAsync(); } return null; } /// /// 从URL获取字符串内容 /// /// /// POST的内容 /// POST的类型 /// public static string? PostToUrl(this string url, string content, string contentType) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException($"“{nameof(url)}”不能为 null 或空。", nameof(url)); } using var httpClient = new HttpClient(); var response = httpClient.PostAsync(url, new StringContent(content, Encoding.UTF8, contentType)).WaitAndGetResult(); if (response.IsSuccessStatusCode) { return response.Content.ReadAsStringAsync().Result; } return null; } /// /// 通过给定的URL获取其文件名 /// /// 指定的URL /// public static async Task GetFileNameFromUrl(this string url) { var response = await new HttpClient().GetAsync(url, HttpCompletionOption.ResponseHeadersRead); response.EnsureSuccessStatusCode(); if (response.Content.Headers.ContentDisposition?.FileName is null) return Path.GetFileName(response.RequestMessage?.RequestUri?.AbsolutePath); return response.Content.Headers.ContentDisposition.FileNameStar; } /// /// 获取当前正在使用的本机IP地址 /// /// IP地址 public static IPAddress? GetLocalIPAddress() { foreach (var networkInterface in NetworkInterface.GetAllNetworkInterfaces()) { if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Loopback || networkInterface.OperationalStatus != OperationalStatus.Up) continue; var ipProperties = networkInterface.GetIPProperties(); if (ipProperties.GatewayAddresses.Count > 0) foreach (var ip in ipProperties.UnicastAddresses) if (ip.Address.AddressFamily == AddressFamily.InterNetwork) return ip.Address; } return null; } }