建立.NET Core Web Api项目

建立请求模型

  1. public class UserInfo
  2. {
  3. public int Age { get; set; }
  4. public string Name { get; set; }
  5. public bool Sex { get; set; }
  6. public Guid Id { get; set; }
  7. }

建立控制器

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;

  7. namespace AspNetCore.Api.Controllers
  8. {
  9. [Route("api/[controller]/[action]")]
  10. [ApiController]
  11. public class DefaultController : ControllerBase
  12. {
  13. /// <summary>
  14. /// 用户信息
  15. /// </summary>
  16. public static UserInfo UserInfo = new UserInfo
  17. {
  18. Id = Guid.NewGuid(),
  19. Age = 23,
  20. Name = "Jon",
  21. Sex = true
  22. };

  23. [HttpGet]
  24. public IActionResult Test()
  25. {
  26. return new JsonResult("OK");
  27. }

  28. /// <summary>
  29. /// API GET
  30. /// </summary>
  31. /// <returns></returns>
  32. [HttpPost]
  33. public ActionResult<UserInfo> GetUser([FromBody]UserInfo user)
  34. {
  35. return new JsonResult(user);
  36. }

  37. /// <summary>
  38. /// API POST
  39. /// </summary>
  40. /// <returns></returns>
  41. [HttpPost]
  42. public ActionResult<UserInfo> Upload()
  43. {
  44. var files = Request.Form.Files;
  45. return new JsonResult($"Read {string.Join(Environment.NewLine,files.Select(x=>x.FileName))} Success !");
  46. }
  47. }
  48. }

建立.NET Core Web项目

建立控制器

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.Extensions.Logging;
  8. using AspNetCore.Web.Models;
  9. using Microsoft.Extensions.Caching.Memory;
  10. using System.IO;
  11. using Microsoft.AspNetCore.Http;
  12. using System.Threading;
  13. using System.Net.Http;
  14. using System.Net;

  15. namespace AspNetCore.Web.Controllers
  16. {
  17. public class HomeController : Controller
  18. {
  19. private readonly ILogger<HomeController> _logger;
  20. private readonly IMemoryCache _cache;
  21. public HomeController(ILogger<HomeController> logger, IMemoryCache cache)
  22. {
  23. _logger = logger;
  24. _cache = cache;
  25. }

  26. public IActionResult Index()
  27. {
  28. return View();
  29. }

  30. public IActionResult Privacy()
  31. {
  32. return View();
  33. }

  34. [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
  35. public IActionResult Error()
  36. {
  37. return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
  38. }

  39. /// <summary>
  40. /// 上传文件
  41. /// </summary>
  42. /// <returns></returns>
  43. [RequestSizeLimit(1_073_741_824)]
  44. public IActionResult Upload()
  45. {
  46. var url = "http://localhost:9001/Api/Default/Upload";

  47. var data = new MultipartFormDataContent();
  48. if (Request.HasFormContentType)
  49. {
  50. var request = Request.Form.Files;
  51. foreach (var item in request)
  52. {
  53. data.Add(new StreamContent(item.OpenReadStream()), item.Name, item.FileName);
  54. }

  55. foreach (var item in Request.Form)
  56. {
  57. data.Add(new StringContent(item.Value), item.Key);
  58. }
  59. }
  60. string jsonString = string.Empty;
  61. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  62. {
  63. var taskResponse = client.PostAsync(url, data);
  64. taskResponse.Wait();
  65. if (taskResponse.IsCompletedSuccessfully)
  66. {
  67. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  68. taskStream.Wait();
  69. using (var reader = new StreamReader(taskStream.Result))
  70. {
  71. jsonString = reader.ReadToEnd();
  72. }
  73. }
  74. }
  75. return new JsonResult(jsonString);
  76. }

  77. /// <summary>
  78. /// 保存文件
  79. /// </summary>
  80. /// <returns></returns>
  81. [HttpPost]
  82. [RequestSizeLimit(1_073_741_824)]
  83. public async Task<IActionResult> Save()
  84. {
  85. Stopwatch sw = new Stopwatch();
  86. sw.Start();
  87. var form = await Request.ReadFormAsync();
  88. int saveCount = 0;
  89. long totalCount = form.Files.Sum(x => x.Length);
  90. foreach (var item in form.Files)
  91. {
  92. var fileSavePath = Environment.CurrentDirectory + "\\Files\\" + item.Name;
  93. using (FileStream fs = new FileStream(fileSavePath, FileMode.Create))
  94. {
  95. using (BinaryWriter bw = new BinaryWriter(fs))
  96. {
  97. using (BinaryReader br = new BinaryReader(item.OpenReadStream()))
  98. {
  99. var customReadLength = item.Length;
  100. byte[] buffer = new byte[customReadLength];
  101. int readCount = 0;
  102. while ((readCount = br.Read(buffer, 0, buffer.Length)) > 0)
  103. {
  104. bw.Write(buffer, 0, readCount);
  105. saveCount += readCount;
  106. var progress = (saveCount * 1.0 / totalCount).ToString("0.00");
  107. _cache.Set<string>("UploadSpeed", progress, DateTimeOffset.Now.AddMinutes(60));
  108. Thread.Sleep(1000);
  109. }
  110. }
  111. }
  112. }
  113. }
  114. sw.Stop();
  115. return new JsonResult($"Read {string.Join(Environment.NewLine, Request.Form.Files.Select(x => x.FileName))} Success !耗时:{sw.ElapsedMilliseconds}");
  116. }

  117. /// <summary>
  118. /// 读取进度
  119. /// </summary>
  120. /// <returns></returns>
  121. public IActionResult UploadProgress()
  122. {
  123. var progress = _cache.Get<string>("UploadSpeed");
  124. return Json(progress);
  125. }
  126. }
  127. }

目录结构

设置解决方案为多个项目启动

一、使用jQuery Ajax访问

(一)、表单传参( [FromForm])

数据类型:Object

ContenyType类型:application/x-www-form-urlencoded

  1. var model = { name: "刘大大", age: 23, sex: true };

前台请求

  1. var model = { name: "刘大大", age: 23, sex: true };
  2. $.ajax({
  3. url: "http://localhost:9001/API/Default/FormCall",
  4. type: "POST",
  5. async: true,
  6. dataType: "json",
  7. data: model,
  8. contentType: "application/x-www-form-urlencoded",
  9. success: function (data) {
  10. console.log("data:");
  11. console.log(data);
  12. }
  13. });

(二)、JSON字符串[FromBdy]

数据类型:Json

ContenyType类型:application/json

  1.        var json = '{"name":"刘大大","age":23,"sex":true}';

也可以使用JSON.stringify(Object)将Object转换为JSON字符串

前端请求

  1. var model = { name: "刘大大", age: 23, sex: true };
  2. $.ajax({
  3. url: "http://localhost:9001/API/Default/BodyCall",
  4. type: "POST",
  5. async: true,
  6. dataType: "json",
  7. data: JSON.stringify(model),
  8. contentType: "application/json",
  9. success: function (data) {
  10. console.log("data:");
  11. console.log(data);
  12. }
  13. });

(三)、文件上传

建立FormData对象

数据类型:FromData

ContenyType类型false, //必须false才会避开jQuery对 formdata 的默认处理 processData类型: false, //必须false才会自动加上正确的Content-Type

html

  1. <input type="file" multiple id="file" />

JS获取文件对象

  1. var file = document.getElementById("file");
  2. var files = file.files;
  3. var formData = new FormData();
  4. for (var i = 0; i < files.length; i++) {
  5. formData.append(files[i].name, files[i]);
  6. }    
  7. formData.append("name", "刘大大");//可追加参数

AJAX请求

  1. $.ajax({
  2. url: "http://localhost:9001/API/Default/Upload",
  3. type: "POST",
  4. async: true,
  5. dataType: "json",
  6. data: formData,
  7. contentType: false,
  8. processData: false,
  9. success: function (data) {
  10. console.log(data);
  11. }
  12. });

完整HTML源码

  1. <div class="text-center">
  2. <h1 class="display-4">Welcome</h1>
  3. <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
  4. </div>
  5. <div>
  6. <input type="button" id="fromform" value="Form传参" /><hr />
  7. <input type="button" id="frombody" value="Body传参" /><hr />
  8. <input type="file" multiple id="file" name="上传文件" /><hr />
  9. </div>
  10. <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.js"></script>
  11. <script>
  12.  
  13. /**
  14. * FromForm
  15. * */
  16. var fromform = document.getElementById("fromform");
  17. $(fromform).click(function () {
  18. var url = 'http://localhost:9001/API/Default/FormCall';
  19. var model = { name: "刘大大", age: 23, sex: true };
  20. $.ajax({
  21. url: url,
  22. type: "POST",
  23. async: true,
  24. data: model,
  25. contentType: "application/x-www-form-urlencoded",
  26. success: function (data) {
  27. console.log(data);
  28. alert(JSON.stringify(data));
  29. },
  30. error: function (result) {
  31. console.log(result);
  32. }
  33. });
  34. });
  35.  
  36. /**
  37. * FromBody
  38. * */
  39. $('#frombody').click(function () {
  40. var url = 'http://localhost:9001/API/Default/BodyCall';
  41. var json = '{"name":"刘大大","age":23,"sex":true}';
  42. $.ajax({
  43. url: url,
  44. type: "POST",
  45. async: true,
  46. data: json,
  47. contentType: "application/json",
  48. success: function (data) {
  49. console.log(data);
  50. alert(JSON.stringify(data));
  51. },
  52. error: function (result) {
  53. console.log(result);
  54. }
  55. });
  56. });
  57.  
  58. /**
  59. * FormData
  60. * */
  61. var file = document.getElementById("file");
  62. file.onchange = function () {
  63. var file = document.getElementById("file");
  64. var files = file.files;
  65. var formData = new FormData();
  66. for (var i = 0; i < files.length; i++) {
  67. formData.append(files[i].name, files[i]);
  68. }
  69. formData.append("name", "刘大大");
  70. var isUploadByJs = true;
  71. var url = isUploadByJs ? 'http://localhost:9001/API/Default/Upload' : 'http://localhost:9002/Home/Upload';
  72. $.ajax({
  73. url: url,
  74. type: "POST",
  75. async: true,
  76. dataType: "json",
  77. data: formData,
  78. contentType: false, //必须false才会避开jQuery对 formdata 的默认处理
  79. processData: false, //必须false才会自动加上正确的Content-Type
  80. headers: { ReadTime: Date.now() },
  81. beforeSend: function (xhr) {
  82. xhr.setRequestHeader('Author', 'liudada');
  83. },
  84. success: function (data) {
  85. console.log(data);
  86. alert(JSON.stringify(data));
  87. },
  88. error: function (result) {
  89. console.log(result);
  90. }
  91. });
  92. }
  93. </script>  

二、使用C#后台访问

(一)、Get访问

  1. var url = "http://localhost:57954/API/Default/Test";
  2. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  3. {
  4. var taskResponse = client.GetAsync(url);
  5. taskResponse.Wait();
  6. if (taskResponse.IsCompletedSuccessfully)
  7. {
  8. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  9. taskStream.Wait();
  10. using (var reader = new StreamReader(taskStream.Result))
  11. {
  12. jsonString = reader.ReadToEnd();
  13. }
  14. }
  15. }

(二)、Post访问

  1. var url = "http://localhost:57954/API/Default/BodyCall";
  2. var data = new {name="刘大大",age=23,sex=true };
  3. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  4. {
  5. var jsonToSend = JsonConvert.SerializeObject(data, Formatting.None, new IsoDateTimeConverter());
  6. var body = new StringContent(jsonToSend, Encoding.UTF8, "application/json");
  7. var taskResponse = client.PostAsync(url, body);
  8. taskResponse.Wait();
  9. if (taskResponse.IsCompletedSuccessfully)
  10. {
  11. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  12. taskStream.Wait();
  13. using (var reader = new StreamReader(taskStream.Result))
  14. {
  15. jsonString = reader.ReadToEnd();
  16. }
  17. }
  18. }

  

(三)、上传文件

  1.    
  1. /// <summary>
  2. /// 上传文件
  3. /// </summary>
  4. /// <returns></returns>
  5. [RequestSizeLimit(1_073_741_824)]
  6. public IActionResult Upload()
  7. {
  8. var url = "http://localhost:9001/Api/Default/Upload";

  9. var data = new MultipartFormDataContent();
  10. if (Request.HasFormContentType)
  11. {
  12. var request = Request.Form.Files;
  13. foreach (var item in request)
  14. {
  15. data.Add(new StreamContent(item.OpenReadStream()), item.Name, item.FileName);
  16. }

  17. foreach (var item in Request.Form)
  18. {
  19. data.Add(new StringContent(item.Value), item.Key);
  20. }
  21. }
  22. string jsonString = string.Empty;
  23. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  24. {
  25. var taskResponse = client.PostAsync(url, data);
  26. taskResponse.Wait();
  27. if (taskResponse.IsCompletedSuccessfully)
  28. {
  29. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  30. taskStream.Wait();
  31. using (var reader = new StreamReader(taskStream.Result))
  32. {
  33. jsonString = reader.ReadToEnd();
  34. }
  35. }
  36. }
  37. return new JsonResult(jsonString);
  38. }

  

WebHelper

这里包含了WebRequest和HttpClient两种请求方式,以及包含了将Object对象序列化为HttpCotnent对象的方法。

  1. /***************************************************************************************************************************************************
  2. * *文件名:WebHelper.cs
  3. * *创建人:Jon
  4. * *日 期 :2018年5月25日
  5. * *描 述 :实现HTTP协议中的GET、POST请求
  6. * *MVC使用HttpClient上传文件实例:
  7. public IActionResult Upload()
  8. {
  9.  
  10. var url = "http://localhost:57954/API/Default/values";
  11. var data = new MultipartFormDataContent();
  12. if (Request.HasFormContentType)
  13. {
  14. var request = Request.Form.Files;
  15. foreach (var item in request)
  16. {
  17. data.Add(new StreamContent(item.OpenReadStream()), item.Name, item.FileName);
  18. }
  19.  
  20. foreach (var item in Request.Form)
  21. {
  22. data.Add(new StringContent(item.Value), item.Key);
  23. }
  24. }
  25. WebHelper.PostByHttpClientFromHttpContent(url, data);
  26. return Json("OK");
  27. }
  28. *****************************************************************************************************************************************************/
  29. using Newtonsoft.Json;
  30. using Newtonsoft.Json.Converters;
  31. using Newtonsoft.Json.Linq;
  32. using System;
  33. using System.Collections.Generic;
  34. using System.IO;
  35. using System.Net;
  36. using System.Net.Http;
  37. using System.Net.Http.Headers;
  38. using System.Text;
  39.  
  40. namespace Expansion.Helper
  41. {
  42. public static class WebHelper
  43. {
  44. /// <summary>
  45. /// 通过WebRequest发起Get请求
  46. /// </summary>
  47. /// <param name="url">请求地址</param>
  48. /// <returns>JSON字符串</returns>
  49. public static string GetByWebRequest(string url)
  50. {
  51. string jsonString = string.Empty;
  52. var request = (HttpWebRequest)WebRequest.Create(url);
  53. request.Method = "GET";
  54. request.ContentType = "application/json";
  55. request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
  56. var response = (HttpWebResponse)request.GetResponse();
  57. using (var stream = new StreamReader(response.GetResponseStream()))
  58. {
  59. jsonString = stream.ReadToEnd();
  60. }
  61. return jsonString;
  62. }
  63.  
  64. /// <summary>
  65. /// 通过WebRequest发起Post请求
  66. /// </summary>
  67. /// <param name="url">请求地址</param>
  68. /// <param name="data">请求参数</param>
  69. /// <returns>JSON字符串</returns>
  70. public static string PostByWebRequest(string url, object data)
  71. {
  72. string jsonString = string.Empty;
  73. var request = (HttpWebRequest)WebRequest.Create(url);
  74. request.ContentType = "application/json";
  75. request.Method = "POST";
  76. request.Timeout = Int32.MaxValue;
  77. request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
  78. var jsonToSend = JsonConvert.SerializeObject(data, Formatting.None, new IsoDateTimeConverter());
  79. byte[] btBodys = Encoding.UTF8.GetBytes(jsonToSend);
  80. request.ContentLength = btBodys.Length;
  81. request.GetRequestStream().Write(btBodys, 0, btBodys.Length);
  82. var response = (HttpWebResponse)request.GetResponse();
  83. using (var stream = new StreamReader(response.GetResponseStream()))
  84. {
  85. jsonString = stream.ReadToEnd();
  86. }
  87. return jsonString;
  88. }
  89.  
  90. /// <summary>
  91. /// 通过HttpClient发起Get请求
  92. /// </summary>
  93. /// <param name="url">请求地址</param>
  94. /// <returns>JSON字符串</returns>
  95. public static string GetByHttpClient(string url)
  96. {
  97. string jsonString = string.Empty;
  98. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  99. {
  100. var taskResponse = client.GetAsync(url);
  101. taskResponse.Wait();
  102. if (taskResponse.IsCompletedSuccessfully)
  103. {
  104. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  105. taskStream.Wait();
  106. using (var reader = new StreamReader(taskStream.Result))
  107. {
  108. jsonString = reader.ReadToEnd();
  109. }
  110. }
  111. }
  112. return jsonString;
  113. }
  114.  
  115. /// <summary>
  116. /// 通过HttpClient发起Post请求
  117. /// </summary>
  118. /// <param name="url">请求地址</param>
  119. /// <param name="data">请求参数</param>
  120. /// <returns>JSON字符串</returns>
  121. public static string PostByHttpClient(string url, object data)
  122. {
  123. string jsonString = string.Empty;
  124. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  125. {
  126. var jsonToSend = JsonConvert.SerializeObject(data, Formatting.None, new IsoDateTimeConverter());
  127. var body = new StringContent(jsonToSend, Encoding.UTF8, "application/json");
  128. var taskResponse = client.PostAsync(url, body);
  129. taskResponse.Wait();
  130. if (taskResponse.IsCompletedSuccessfully)
  131. {
  132. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  133. taskStream.Wait();
  134. using (var reader = new StreamReader(taskStream.Result))
  135. {
  136. jsonString = reader.ReadToEnd();
  137. }
  138. }
  139. }
  140. return jsonString;
  141. }
  142.  
  143. /// <summary>
  144. /// 通过数据来自HttpContent的HttpClient发起Post请求
  145. /// </summary>
  146. /// <param name="url">请求地址</param>
  147. /// <param name="content">请求参数</param>
  148. /// <returns>JSON字符串</returns>
  149. public static string PostByHttpClientFromHttpContent(string url, HttpContent content)
  150. {
  151. string jsonString = string.Empty;
  152. using (var client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
  153. {
  154. var taskResponse = client.PostAsync(url, content);
  155. taskResponse.Wait();
  156. if (taskResponse.IsCompletedSuccessfully)
  157. {
  158. var taskStream = taskResponse.Result.Content.ReadAsStreamAsync();
  159. taskStream.Wait();
  160. using (var reader = new StreamReader(taskStream.Result))
  161. {
  162. jsonString = reader.ReadToEnd();
  163. }
  164. }
  165. }
  166. return jsonString;
  167. }
  168.  
  169. /// <summary>
  170. /// Object转换为StreamContent
  171. /// </summary>
  172. /// <param name="data">请求参数</param>
  173. /// <returns>StreamContent</returns>
  174. public static HttpContent ToStreamContent(this object data)
  175. {
  176.  
  177. var json = JsonConvert.SerializeObject(data, Formatting.None, new IsoDateTimeConverter());
  178. byte[] bytes = Encoding.UTF8.GetBytes(json);
  179. MemoryStream ms = new MemoryStream();
  180. ms.Write(bytes, 0, bytes.Length);
  181. ms.Position = 0;
  182. HttpContent streamContent = new StreamContent(ms);
  183. return streamContent;
  184. }
  185.  
  186. /// <summary>
  187. /// Object转换为StringContent
  188. /// </summary>
  189. /// <param name="data">请求参数</param>
  190. /// <returns>StringContent</returns>
  191. public static HttpContent ToStringContent(this object data)
  192. {
  193. HttpContent stringContent = new StringContent(JsonConvert.SerializeObject(data));
  194. return stringContent;
  195. }
  196.  
  197. /// <summary>
  198. /// Object转换为MultipartFormDataContent
  199. /// </summary>
  200. /// <param name="data"></param>
  201. /// <returns>MultipartFormDataContent</returns>
  202. public static HttpContent ToMultipartFormDataContent(this object data)
  203. {
  204. var json = JsonConvert.SerializeObject(data, Formatting.None, new IsoDateTimeConverter());
  205. var body = new StringContent(json, Encoding.UTF8, "application/json");
  206. var multipartFormDataContent = new MultipartFormDataContent();
  207. multipartFormDataContent.Add(body);
  208. return multipartFormDataContent;
  209. }
  210.  
  211. /// <summary>
  212. /// Object转换为FormUrlEncodedContent
  213. /// </summary>
  214. /// <param name="data">请求参数</param>
  215. /// <returns>FormUrlEncodedContent</returns>
  216. public static HttpContent ToFormUrlEncodedContent(this object data)
  217. {
  218. var param = new List<KeyValuePair<string, string>>();
  219. var values = JObject.FromObject(data);
  220. foreach (var item in values)
  221. {
  222. param.Add(new KeyValuePair<string, string>(item.Key, item.Value.ToString()));
  223. }
  224. HttpContent formUrlEncodedContent = new FormUrlEncodedContent(param);
  225. return formUrlEncodedContent;
  226. }
  227.  
  228. /// <summary>
  229. /// Object转换为ByteArrayContent
  230. /// </summary>
  231. /// <param name="data">请求参数</param>
  232. /// <returns>FormUrlEncodedContent</returns>
  233. public static HttpContent ToByteArrayContent(this object data)
  234. {
  235. var json = JsonConvert.SerializeObject(data, Formatting.None, new IsoDateTimeConverter());
  236. byte[] bytes = Encoding.UTF8.GetBytes(json);
  237. HttpContent byteArrayContent = new ByteArrayContent(bytes);
  238. return byteArrayContent;
  239. }
  240.  
  241. /// <summary>
  242. /// Url编码
  243. /// </summary>
  244. /// <param name="content">内容</param>
  245. /// <param name="encode">编码类型</param>
  246. /// <returns></returns>
  247. private static string Encode(string content, Encoding encode = null)
  248. {
  249. if (encode == null) return content;
  250.  
  251. return System.Web.HttpUtility.UrlEncode(content, Encoding.UTF8);
  252.  
  253. }
  254.  
  255. /// <summary>
  256. /// Url解码
  257. /// </summary>
  258. /// <param name="content">内容</param>
  259. /// <param name="encode">编码类型</param>
  260. /// <returns></returns>
  261. private static string Decode(string content, Encoding encode = null)
  262. {
  263. if (encode == null) return content;
  264.  
  265. return System.Web.HttpUtility.UrlDecode(content, Encoding.UTF8);
  266.  
  267. }
  268.  
  269. /// <summary>
  270. /// 将键值对参数集合拼接为Url字符串
  271. /// </summary>
  272. /// <param name="paramArray">键值对集合</param>
  273. /// <param name="encode">转码类型</param>
  274. /// <returns></returns>
  275. private static string BuildParam(List<KeyValuePair<string, string>> paramArray, Encoding encode = null)
  276. {
  277. string url = "";
  278.  
  279. if (encode == null) encode = Encoding.UTF8;
  280.  
  281. if (paramArray != null && paramArray.Count > 0)
  282. {
  283. var parms = "";
  284. foreach (var item in paramArray)
  285. {
  286. parms += string.Format("{0}={1}&", Encode(item.Key, encode), Encode(item.Value, encode));
  287. }
  288. if (parms != "")
  289. {
  290. parms = parms.TrimEnd('&');
  291. }
  292. url += parms;
  293.  
  294. }
  295. return url;
  296. }
  297. }
  298. }

时间仓促,没能说的太详细,有时间再做补充。如本文中的有错误示范,欢迎指正

源码地址:https://github.com/lwc1st/AspNetCore.UploadDemo.git

通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传的更多相关文章

  1. 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    一个简单的QQ隐藏图生成算法   隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...

  2. jquery文件上传控件 Uploadify

    (转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

  3. jquery文件上传控件 Uploadify 可以和ajax交互

    http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html  原网址 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

  4. jquery文件上传控件 Uploadify(转)

    原文:http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上 ...

  5. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  6. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

  7. jQuery文件上传插件Uploadify(转)

    一款基于flash的文件上传,有进度条和支持大文件上传,且可以多文件上传队列. 这款在flash的基础上增加了html5的支持,所以在移动端也可以使用. 由于官方提供的版本是flash免费,html5 ...

  8. JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用

    0 ajaxFileUpload简介 ajaxFileUpload插件是一个非常简单的基于Jquery的异步上传文件的插件,使用过程中发现很多与这个同名的,基于原始版本基础之上修改过的插件,文件版本比 ...

  9. jQuery uploadify 文件上传

    uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能.现在最新版为3.2.1. 在线实例 实例预览 Uploadify 在线实例Demo ...

随机推荐

  1. SQL中内连接和外连接的问题!

    本文系转载,版权归原作者所有. 如表      -------------------------------------------------      table1 | table2 |    ...

  2. Aop实现SqlSugar自动事务

    http://www.cnblogs.com/jaycewu/p/7733114.html

  3. Factory Method (工厂模式)

    什么是工厂设计模式 根据名字即可了解,工厂肯定是用来生产产品的,在我们的程序开发中,需要用到不同的类,对于熟悉SSH.SSM开发的可以知道,在初期学习的时候,总是有一个框架提供好的的factory供我 ...

  4. Mac下通过brew安装指定版本的nodejs

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC Semibold"; color: #2c303 ...

  5. MySql foreach属性

    foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.info.details.具体说明:在list和数组中是其中的对象,在map中是val ...

  6. 推荐免费小巧图片大小处理工具--Image Resizer for Windows

    开源免费小巧,项目地址:http://imageresizer.codeplex.com/

  7. Django-CKedtior图片找不到的问题

    从Django Packages站点上找到这个CKeditor集成组件:https://github.com/shaunsephton/django-ckeditor 按照官方的install方法安装 ...

  8. App免费推广途径概要

    说在前面的话:免费其实挺花功夫的,所有的营销的前提是产品和服务是值得推荐的. 1.技术操作维度:ASO,SEO, ASO简单介绍:http://baike.baidu.com/subview/1368 ...

  9. Spark学习笔记

    Map-Reduce 我认为上图代表着MapReduce不仅仅包括Map和Reduce两个步骤这么简单,还有两个隐含步骤没有明确,全部步骤包括:切片.转换.聚合.叠加,按照实际的运算场景上述步骤可以简 ...

  10. Node笔记二

    ### 安装包的方式安装 - 安装包下载链接: + Mac OSX: [darwin](http://npm.taobao.org/mirrors/node/v5.7.0/node-v5.7.0.pk ...