XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Net.Http;
using System.Text;
using XFEExtension.NetCore.TaskExtension;

namespace XFEExtension.NetCore.WebExtension;

/// <summary>
/// 网络拓展
/// </summary>
public static class WebExtension
{
    /// <summary>
    /// 从URL获取字符串内容
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public static async Task<string?> 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();
        }
        else
        {
            return null;
        }
    }
    /// <summary>
    /// 从URL获取字符串内容
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    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;
        }
        else
        {
            return null;
        }
    }
    /// <summary>
    /// 从URL获取字符串内容
    /// </summary>
    /// <param name="url"></param>
    /// <param name="content">POST的内容</param>
    /// <returns></returns>
    public static async Task<string?> 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();
        }
        else
        {
            return null;
        }
    }
    /// <summary>
    /// 从URL获取字符串内容
    /// </summary>
    /// <param name="url"></param>
    /// <param name="content">POST的内容</param>
    /// <returns></returns>
    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;
        }
        else
        {
            return null;
        }
    }
    /// <summary>
    /// 从URL获取字符串内容
    /// </summary>
    /// <param name="url"></param>
    /// <param name="content">POST的内容</param>
    /// <param name="contentType">POST的类型</param>
    /// <returns></returns>
    public static async Task<string?> 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();
        }
        else
        {
            return null;
        }
    }
    /// <summary>
    /// 从URL获取字符串内容
    /// </summary>
    /// <param name="url"></param>
    /// <param name="content">POST的内容</param>
    /// <param name="contentType">POST的类型</param>
    /// <returns></returns>
    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;
        }
        else
        {
            return null;
        }
    }
    /// <summary>
    /// 通过给定的URL获取其文件名
    /// </summary>
    /// <param name="url">指定的URL</param>
    /// <returns></returns>
    public static async Task<string?> 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);
        else
            return response.Content.Headers.ContentDisposition.FileNameStar;
    }
}