c# – 通过HttpClient发布文件时,HttpRequest.Files为空
发布时间:2020-12-15 08:14:15 所属栏目:百科 来源:网络整理
导读:服务器端: public HttpResponseMessage Post([FromUri]string machineName) { HttpResponseMessage result = null; var httpRequest = HttpContext.Current.Request; if (httpRequest.Files.Count 0 !String.IsNullOrEmpty(machineName)) ... 客户端: publ
服务器端:
public HttpResponseMessage Post([FromUri]string machineName) { HttpResponseMessage result = null; var httpRequest = HttpContext.Current.Request; if (httpRequest.Files.Count > 0 && !String.IsNullOrEmpty(machineName)) ... 客户端: public static void PostFile(string url,string filePath) { if (String.IsNullOrWhiteSpace(url) || String.IsNullOrWhiteSpace(filePath)) throw new ArgumentNullException(); if (!File.Exists(filePath)) throw new FileNotFoundException(); using (var handler = new HttpClientHandler { Credentials= new NetworkCredential(AppData.UserName,AppData.Password,AppCore.Domain) }) using (var client = new HttpClient(handler)) using (var content = new MultipartFormDataContent()) using (var ms = new MemoryStream(File.ReadAllBytes(filePath))) { var fileContent = new StreamContent(ms); fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = Path.GetFileName(filePath) }; content.Add(fileContent); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); var result = client.PostAsync(url,content).Result; result.EnsureSuccessStatusCode(); } } 在服务器端,httpRequest.Files集合始终为空.但标题(内容长度等)是正确的. 解决方法
您不应该使用HttpContext来获取ASP.NET Web API中的文件.看看这个由微软(
http://code.msdn.microsoft.com/ASPNET-Web-API-File-Upload-a8c0fb0d/sourcecode?fileId=67087&pathId=565875642)编写的例子.
public class UploadController : ApiController { public async Task<HttpResponseMessage> PostFile() { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root = HttpContext.Current.Server.MapPath("~/App_Data"); var provider = new MultipartFormDataStreamProvider(root); try { StringBuilder sb = new StringBuilder(); // Holds the response body // Read the form data and return an async task. await Request.Content.ReadAsMultipartAsync(provider); // This illustrates how to get the form data. foreach (var key in provider.FormData.AllKeys) { foreach (var val in provider.FormData.GetValues(key)) { sb.Append(string.Format("{0}: {1}n",key,val)); } } // This illustrates how to get the file names for uploaded files. foreach (var file in provider.FileData) { FileInfo fileInfo = new FileInfo(file.LocalFileName); sb.Append(string.Format("Uploaded file: {0} ({1} bytes)n",fileInfo.Name,fileInfo.Length)); } return new HttpResponseMessage() { Content = new StringContent(sb.ToString()) }; } catch (System.Exception e) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,e); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |