从Xamarin调用文件上传服务失败,附C# WebAPI 2实现代码
实现文件上传的ASP.NET Web API 2接口
下面是一个完整的异步文件上传Web API接口实现,包含基础的文件校验、响应处理,还补充了你代码中省略的关键逻辑:
using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; using Newtonsoft.Json; using System.IO; using System.Text; using System.Threading.Tasks; public async Task<HttpResponseMessage> PostAttachments() { Dictionary<string, object> responseData = new Dictionary<string, object>(); var httpRequest = HttpContext.Current.Request; // 处理多文件上传场景 foreach (string fileKey in httpRequest.Files) { var postedFile = httpRequest.Files[fileKey]; if (postedFile != null && postedFile.ContentLength > 0) { // 示例:设置文件保存路径(确保Uploads目录存在,否则会报错) var uploadDir = HttpContext.Current.Server.MapPath("~/Uploads"); Directory.CreateDirectory(uploadDir); var savePath = Path.Combine(uploadDir, postedFile.FileName); // 保存文件到服务器 postedFile.SaveAs(savePath); // 准备响应数据 responseData.Add($"File_{fileKey}_Name", postedFile.FileName); responseData.Add($"File_{fileKey}_Size", $"{postedFile.ContentLength / 1024} KB"); responseData.Add($"File_{fileKey}_Status", "Uploaded successfully"); } else { responseData.Add($"File_{fileKey}_Status", "File is empty or not provided"); } } // 根据上传结果返回对应响应 if (responseData.Count == 0) { responseData.Add("Status", "No files found in request"); return Request.CreateResponse(HttpStatusCode.BadRequest, responseData); } else { responseData.Add("Overall_Status", "Upload process completed"); return Request.CreateResponse(HttpStatusCode.Created, responseData); } }
关键细节说明:
- 接口采用异步实现,符合Web API性能优化的最佳实践
- 支持多文件上传,通过遍历
httpRequest.Files处理所有上传的文件 - 加入了目录自动创建逻辑,避免因上传目录不存在导致的保存失败
- 返回结构化的JSON响应,方便客户端解析上传结果
- 可扩展的优化点:
- 添加文件类型校验(比如仅允许jpg、pdf、docx等指定格式)
- 设置最大文件大小限制,防止超大文件占用服务器资源
- 对文件名进行重命名处理,避免同名文件覆盖
- 加入异常捕获逻辑,处理文件保存时的意外错误
内容的提问来源于stack exchange,提问作者Jitendra Pancholi
相关产品推荐
相关产品推荐

