(精华)2020年8月17日 WebApi后端实现HTTP请求数据

/// <summary>
/// 要求HttpClient的实例化都从这里来  全局只要一个实例,不要using
/// 各个请求是隔开的,可以复用链接的 
/// </summary>
public class HttpClientFactory
{
    private static HttpClient _HttpClient = null;
    static HttpClientFactory()
    {
        _HttpClient = new HttpClient(new HttpClientHandler());
    }
    public static HttpClient GetHttpClient()
    {
        return _HttpClient;
    }
}



/// <summary>
/// WebApi全部遵循的Http协议,HttpMethod
/// 其实就等同于网页,可以去爬虫
/// 就时后端模拟Http请求
/// 
/// HttpWebRequest  HttpClient
/// 
/// HttpClient
/// using (var http = new HttpClient(handler)) 不太好 tcp其实并不能立即释放掉
/// 如果高并发式的这样操作,会出现资源不够  积极拒绝
/// HttpClient内部有个连接池,各个请求是隔开的,可以复用链接的 实际应该单例一下
/// </summary>
[TestClass]
public class WebapiTest
{
    [TestMethod]
    public void TestMethod()
    {
        this.AuthorizationDemo();

        var result1 = this.GetClient();
        var result2 = this.GetWebQuest();
        var result3 = this.PostClient();
        var result4 = this.PostWebQuest();
        var result5 = this.PutClient();
        var result6 = this.PutWebQuest();
        var result7 = this.DeleteClient();//传值只能是url
        var result8 = this.DeleteWebQuest();
        //Console.WriteLine();
    }

    #region HttpClient Get
    /// <summary>
    /// HttpClient实现Get请求
    /// </summary>
    private string GetClient()
    {
        //string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
        //string url = "http://localhost:8088/api/users/GetUserByID?id=1";
        //string url = "http://localhost:8088/api/users/GetUserByNameId?userName=Superman&id=1";
        //string url = "http://localhost:8088/api/users/Get";
        //string url = "http://localhost:8088/api/users/GetUserByModel?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
        string url = "http://localhost:8088/api/users/GetUserByModelUri?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
        //string url = "http://localhost:8088/api/users/GetUserByModelSerialize?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
        //string url = "http://localhost:8088/api/users/GetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
        //string url = "http://localhost:8088/api/users/NoGetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
        var handler = new HttpClientHandler();//{ AutomaticDecompression = DecompressionMethods.GZip };

        using (var http = new HttpClient(handler))
        {
            var response = http.GetAsync(url).Result;//拿到异步结果
            Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
            //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
            return response.Content.ReadAsStringAsync().Result;
        }
    }
    #endregion

    #region HttpWebRequest实现Get请求
    /// <summary>
    /// HttpWebRequest实现Get请求
    /// </summary>
    private string GetWebQuest()
    {
        //string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
        //string url = "http://localhost:8088/api/users/GetUserByID?id=1";
        //string url = "http://localhost:8088/api/users/GetUserByNameId?userName=Superman&id=1";
        //string url = "http://localhost:8088/api/users/Get";
        //string url = "http://localhost:8088/api/users/GetUserByModel?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
        //string url = "http://localhost:8088/api/users/GetUserByModelUri?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
        string url = "http://localhost:8088/api/users/GetUserByModelSerialize?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
        //string url = "http://localhost:8088/api/users/GetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
        //string url = "http://localhost:8088/api/users/NoGetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 30 * 1000;

        //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
        //request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
        string result = "";
        using (var res = request.GetResponse() as HttpWebResponse)
        {
            if (res.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        return result;
    }

    #endregion

    #region HttpClient实现Post请求
    /// <summary>
    /// HttpClient实现Post请求
    /// </summary>
    private string PostClient()
    {
        //string url = "http://localhost:8088/api/users/register";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"","1" }
        //};

        //string url = "http://localhost:8088/api/users/RegisterNoKey";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"","1" }
        //};

        //string url = "http://localhost:8088/api/users/RegisterUser";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"UserID","11" },
        //    {"UserName","Eleven" },
        //    {"UserEmail","57265177@qq.com" },
        //};

        string url = "http://localhost:8088/api/users/RegisterObject";
        Dictionary<string, string> dic = new Dictionary<string, string>()
        {
            {"User[UserID]","11" },
            {"User[UserName]","Eleven" },
            {"User[UserEmail]","57265177@qq.com" },
            {"Info","this is muti model" }
        };

        HttpClientHandler handler = new HttpClientHandler();
        using (var http = new HttpClient(handler))
        {
            //使用FormUrlEncodedContent做HttpContent
            var content = new FormUrlEncodedContent(dic);
            var response = http.PostAsync(url, content).Result;
            Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
            return response.Content.ReadAsStringAsync().Result;
        }

    }
    #endregion

    #region  HttpWebRequest实现post请求
    /// <summary>
    /// HttpWebRequest实现post请求
    /// </summary>
    private string PostWebQuest()
    {
        //string url = "http://localhost:8088/api/users/register";
        //var postData = "1";

        //string url = "http://localhost:8088/api/users/RegisterNoKey";
        //var postData = "1";

        var user = new
        {
            UserID = "11",
            UserName = "Eleven",
            UserEmail = "57265177@qq.com"
        };
        //string url = "http://localhost:8088/api/users/RegisterUser";
        //var postData = JsonHelper.ObjectToString(user);

        var userOther = new
        {
            User = user,
            Info = "this is muti model"
        };
        string url = "http://localhost:8088/api/users/RegisterObject";
        var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);

        var request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Timeout = 30 * 1000;//设置30s的超时
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
        request.ContentType = "application/json";
        request.Method = "POST";
        byte[] data = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = data.Length;
        Stream postStream = request.GetRequestStream();
        postStream.Write(data, 0, data.Length);
        postStream.Close();

        string result = "";
        using (var res = request.GetResponse() as HttpWebResponse)
        {
            if (res.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        return result;
    }
    #endregion

    #region HttpClient实现Put请求
    /// <summary>
    /// HttpClient实现Put请求
    /// </summary>
    private string PutClient()
    {
        string url = "http://localhost:8088/api/users/RegisterPut";
        Dictionary<string, string> dic = new Dictionary<string, string>()
        {
            {"","1" }
        };

        //string url = "http://localhost:8088/api/users/RegisterNoKeyPut";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"","1" }
        //};

        //string url = "http://localhost:8088/api/users/RegisterUserPut";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"UserID","11" },
        //    {"UserName","Eleven" },
        //    {"UserEmail","57265177@qq.com" },
        //};

        //string url = "http://localhost:8088/api/users/RegisterObjectPut";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"User[UserID]","11" },
        //    {"User[UserName]","Eleven" },
        //    {"User[UserEmail]","57265177@qq.com" },
        //    {"Info","this is muti model" }
        //};

        HttpClientHandler handler = new HttpClientHandler();
        using (var http = new HttpClient(handler))
        {
            //使用FormUrlEncodedContent做HttpContent
            var content = new FormUrlEncodedContent(dic);
            var response = http.PutAsync(url, content).Result;
            Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
            return response.Content.ReadAsStringAsync().Result;
        }

    }
    #endregion

    #region  HttpWebRequest实现put请求
    /// <summary>
    /// HttpWebRequest实现put请求
    /// </summary>
    private string PutWebQuest()
    {
        //string url = "http://localhost:8088/api/users/registerPut";
        //var postData = "1";

        //string url = "http://localhost:8088/api/users/RegisterNoKeyPut";
        //var postData = "1";

        var user = new
        {
            UserID = "11",
            UserName = "Eleven",
            UserEmail = "57265177@qq.com"
        };
        //string url = "http://localhost:8088/api/users/RegisterUserPut";
        //var postData = JsonHelper.ObjectToString(user);

        var userOther = new
        {
            User = user,
            Info = "this is muti model"
        };
        string url = "http://localhost:8088/api/users/RegisterObjectPut";
        var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);

        var request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Timeout = 30 * 1000;//设置30s的超时
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
        request.ContentType = "application/json";
        request.Method = "PUT";
        byte[] data = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = data.Length;
        Stream postStream = request.GetRequestStream();
        postStream.Write(data, 0, data.Length);
        postStream.Close();

        string result = "";
        using (var res = request.GetResponse() as HttpWebResponse)
        {
            if (res.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        return result;
    }
    #endregion

    #region HttpClient实现Delete请求
    /// <summary>
    /// HttpClient实现Put请求
    /// 没放入数据
    /// </summary>
    private string DeleteClient()
    {
        string url = "http://localhost:8088/api/users/RegisterDelete/1";
        Dictionary<string, string> dic = new Dictionary<string, string>()
        {
            {"","1" }
        };

        //string url = "http://localhost:8088/api/users/RegisterNoKeyDelete";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"","1" }
        //};

        //string url = "http://localhost:8088/api/users/RegisterUserDelete";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"UserID","11" },
        //    {"UserName","Eleven" },
        //    {"UserEmail","57265177@qq.com" },
        //};

        //string url = "http://localhost:8088/api/users/RegisterObjectDelete";
        //Dictionary<string, string> dic = new Dictionary<string, string>()
        //{
        //    {"User[UserID]","11" },
        //    {"User[UserName]","Eleven" },
        //    {"User[UserEmail]","57265177@qq.com" },
        //    {"Info","this is muti model" }
        //};

        HttpClientHandler handler = new HttpClientHandler();
        using (var http = new HttpClient(handler))
        {
            //使用FormUrlEncodedContent做HttpContent
            var content = new FormUrlEncodedContent(dic);
            var response = http.DeleteAsync(url).Result;
            Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
            return response.Content.ReadAsStringAsync().Result;
        }
    }
    #endregion

    #region  HttpWebRequest实现put请求
    /// <summary>
    /// HttpWebRequest实现put请求
    /// </summary>
    private string DeleteWebQuest()
    {
        //string url = "http://localhost:8088/api/users/registerDelete";
        //var postData = "1";

        //string url = "http://localhost:8088/api/users/RegisterNoKeyDelete";
        //var postData = "1";

        var user = new
        {
            UserID = "11",
            UserName = "Eleven",
            UserEmail = "57265177@qq.com"
        };
        //string url = "http://localhost:8088/api/users/RegisterUserDelete";
        //var postData = JsonHelper.ObjectToString(user);

        var userOther = new
        {
            User = user,
            Info = "this is muti model"
        };
        string url = "http://localhost:8088/api/users/RegisterObjectDelete";
        var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);

        var request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Timeout = 30 * 1000;//设置30s的超时
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
        request.ContentType = "application/json";
        request.Method = "Delete";
        byte[] data = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = data.Length;
        Stream postStream = request.GetRequestStream();
        postStream.Write(data, 0, data.Length);
        postStream.Close();

        string result = "";
        using (var res = request.GetResponse() as HttpWebResponse)
        {
            if (res.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        return result;
    }
    #endregion


    #region 用户登陆 获取ticket后使用
    private void AuthorizationDemo()
    {
        string ticket = "";
        {
            string loginUrl = "http://localhost:8088/api/users/Login?Account=Admin&Password=123456";
            var handler = new HttpClientHandler();//{ AutomaticDecompression = DecompressionMethods.GZip };

            using (var http = new HttpClient(handler))
            {
                var response = http.GetAsync(loginUrl).Result;//拿到异步结果
                Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
                                                        //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
                ticket = response.Content.ReadAsStringAsync().Result.Replace("\"{\\\"Result\\\":true,\\\"Ticket\\\":\\\"", "").Replace("\\\"}\"", "");
                //ticket = JsonHelper.StringToObject<TicketModel>(response.Content.ReadAsStringAsync().Result).Ticket;
            }
        }
        {
            string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Timeout = 30 * 1000;
            request.Headers.Add(HttpRequestHeader.Authorization, "BasicAuth " + ticket);//头文件增加Authorization
            //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
            //request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            string result = "";
            using (var res = request.GetResponse() as HttpWebResponse)
            {
                if (res.StatusCode == HttpStatusCode.OK)
                {
                    StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                    result = reader.ReadToEnd();
                }
            }
        }
        {
            string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
            var handler = new HttpClientHandler();

            using (var http = new HttpClient(handler))
            {
                http.DefaultRequestHeaders.Add("Authorization", "BasicAuth " + ticket);//头文件增加Authorization
                var response = http.GetAsync(url).Result;
                Console.WriteLine(response.StatusCode);
                string result = response.Content.ReadAsStringAsync().Result;
            }
        }
    }
    #endregion
}

在 C# 中,前端通过 AJAX 技术(比如使用 jQuery 或 Axios 等库)将本地的数据文件(通常是 JSON 格式)上传到Web API服务。以下是简单的步骤: 1. **前端部分**: - 创建一个表单或者按钮,用户点击后触发文件选择事件。 - 使用 JavaScript 的 `FormData` 或 `FileReader` 对象读取文件数据,并将其转化为 JSON 或二进制数据。 - 发送 HTTP POST 请求到服务器的指定URL,通常包含文件数据以及一些身份验证信息。 ```javascript var formData = new FormData(); formData.append('file', fileInput.files[0], 'filename.json'); axios.post('/api/upload', formData) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` 2. **Web API 部分**: - 在后端(C#),接收来自前端的文件,可以是 `MultipartFormDataContext` 或者直接解析请求体。 - 将接收到的数据保存到内存暂存区或者临时文件,以便进一步处理。 - 使用 `HttpClient` 或者 `EntityFramework` 等工具,连接到 MySQL 数据库,执行插入操作。 ```csharp public async Task<IActionResult> Upload(IFormFile file) { // 检查文件,验证并转换成JSON或其他格式 string jsonData = await File.ReadAllTextAsync(file.OpenReadStream()); // 插入MySQL数据库 using (var context = new MyDbContext()) { var dataModel = JsonConvert.DeserializeObject<MyDataModel>(jsonData); context.MyDataTable.Add(dataModel); await context.SaveChangesAsync(); } return Ok("文件已成功上传并存储到数据库"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公搬代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值