问题
我正在尝试发布API以将数据发送到API,该API调用我的内部API服务以将该数据发送到其他API i服务.实体包含带文件的属性.这只将文件发送到另一个派生,但NameSender属性不随文件一起发送.
实体
public class Email { public string NameSender{ get; set; } public List<IFormFile> Files { get; set; } }
API
[Consumes("multipart/form-data")] [HttpPost] public IActionResult SendEmail([FromForm]Entity entity) { try { string Servicesfuri = this.serviceContext.CodePackageActivationContext.ApplicationName + "/" + this.configSettings.SendNotificationServiceName; string proxyUrl = $"http://localhost:{this.configSettings.ReverseProxyPort}/{Servicesfuri.Replace("fabric:/","")}/api/values/Send"; //attachments var requestContent = new MultipartFormDataContent(); foreach (var item in entity.Files) { StreamContent streamContent = new StreamContent(item.OpenReadStream()); var fileContent = new ByteArrayContent(streamContent.ReadAsByteArrayAsync().Result); requestContent.Add(fileContent,item.Name,item.FileName); } HttpResponseMessage response = this.httpClient.PostAsync(proxyUrl,requestContent).Result; if (response.StatusCode != System.Net.HttpStatusCode.OK) { return this.StatusCode((int)response.StatusCode); } return this.Ok(response.Content.ReadAsStringAsync().Result); } catch (Exception e) { throw e; } }
解决方法
这种方法适合我.您可以使用表单数据和文件
public async Task<bool> Upload(FileUploadRequest model) { var httpClientHandler = new HttpClientHandler() { Proxy = new WebProxy("proxyAddress","proxyPort") { Credentials = CredentialCache.DefaultCredentials },PreAuthenticate = true,UseDefaultCredentials = true }; var fileContent = new StreamContent(model.File.OpenReadStream()) { Headers = { ContentLength = model.File.Length,ContentType = new MediaTypeHeaderValue(model.File.ContentType) } }; var formDataContent = new MultipartFormDataContent(); formDataContent.Add(fileContent,"File",model.File.FileName); // file formDataContent.Add(new StringContent("Test Full Name"),"FullName"); // form input using (var client = new HttpClient(handler: httpClientHandler,disposeHandler: true)) { client.DefaultRequestHeaders.Add("Authorization","Bearer " + tokenString); using (var res = await client.PostAsync("http://filestorageurl",formDataContent)) { return res.IsSuccessStatusCode; } } }