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;
}
}