C# 将文件从另一个webapi传递到另一个asp.net核心webapi
现有的asp.net核心Api如下所示C# 将文件从另一个webapi传递到另一个asp.net核心webapi,c#,asp.net-core,httprequest,httpclient,asp.net-core-webapi,C#,Asp.net Core,Httprequest,Httpclient,Asp.net Core Webapi,现有的asp.net核心Api如下所示 public async Task<IActionResult> UploadAsync() { IFormFile file = null; var files = Request.Form.Files; if (files.Count > 0) { file = Request.Form.Files[0]; var fileText = new StringBuild
public async Task<IActionResult> UploadAsync()
{
IFormFile file = null;
var files = Request.Form.Files;
if (files.Count > 0)
{
file = Request.Form.Files[0];
var fileText = new StringBuilder();
using (var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
fileText.AppendLine(reader.ReadLine());
}
int stagingDetailId = await _stagingMarketProvider.GetV1StagingStatusDetailId();
var result = await SaveStagingMarketsAsync(_fileProvider.ReadImportedMarkets(fileText.ToString()));
return Ok(result);
}
return Ok();
}
public async Task UploadAsync()
{
ifformfile=null;
var files=Request.Form.files;
如果(files.Count>0)
{
file=Request.Form.Files[0];
var fileText=新的StringBuilder();
使用(var reader=newstreamreader(file.OpenReadStream()))
{
while(reader.Peek()>=0)
AppendLine(reader.ReadLine());
}
int stagingDetailId=wait_stagingMarketProvider.getv1 stagingStatusDetailId();
var result=await saveStagingMarketsSync(_fileProvider.ReadImportedMarkets(fileText.ToString());
返回Ok(结果);
}
返回Ok();
}
现在,要从另一个asp.net核心webapi使用该api,我必须仅通过请求对象传递这些文件,因为业务原因,我无法更改任何现有的api代码。解决方案1:如果您希望您的客户端重定向到其他api,则适用 假设API调用方理解HTTP 302,并且可以相应地采取行动,那么
302重定向应该会对您有所帮助
public IActionResult Post()
{
return Redirect("http://file-handler-api/action");
}
从中,重定向方法将302或301响应返回给客户端
解决方案2:使用HttpClient发布文件的C代码
下面的c#代码来自。这是创建HttpClient对象并尝试将文件发送到web API的简单代码
在从一个API到另一个API执行此操作时,必须首先将文件保存在临时位置。该临时位置将是此方法的参数
此外,上传后,如果不需要,您可能希望删除该文件。这个私有方法可以在文件上传到第一个API完成后调用
private async Task<string> UploadFile(string filePath)
{
_logger.LogInformation($"Uploading a text file [{filePath}].");
if (string.IsNullOrWhiteSpace(filePath))
{
throw new ArgumentNullException(nameof(filePath));
}
if (!File.Exists(filePath))
{
throw new FileNotFoundException($"File [{filePath}] not found.");
}
using var form = new MultipartFormDataContent();
using var fileContent = new ByteArrayContent(await File.ReadAllBytesAsync(filePath));
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
form.Add(fileContent, "file", Path.GetFileName(filePath));
form.Add(new StringContent("789"), "userId");
form.Add(new StringContent("some comments"), "comment");
form.Add(new StringContent("true"), "isPrimary");
var response = await _httpClient.PostAsync($"{_url}/api/files", form);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<FileUploadResult>(responseContent);
_logger.LogInformation("Uploading is complete.");
return result.Guid;
}
专用异步任务上载文件(字符串文件路径)
{
_logger.LogInformation($“上载文本文件[{filePath}]”);
if(string.IsNullOrWhiteSpace(filePath))
{
抛出新ArgumentNullException(nameof(filePath));
}
如果(!File.Exists(filePath))
{
抛出新的FileNotFoundException($“未找到文件[{filePath}”);
}
使用var form=new MultipartFormDataContent();
使用var fileContent=newbytearraycontent(wait File.readallbyteasync(filePath));
fileContent.Headers.ContentType=MediaTypeHeaderValue.Parse(“多部分/表单数据”);
Add(fileContent,“file”,Path.GetFileName(filePath));
添加(新内容(“789”),“用户ID”);
添加(新内容(“一些评论”),“评论”);
表格。添加(新内容(“真实”),“主要”);
var response=wait_httpClient.PostAsync($“{u url}/api/files”,form);
response.EnsureSuccessStatusCode();
var responseContent=await response.Content.ReadAsStringAsync();
var result=JsonSerializer.Deserialize(responseContent);
_logger.LogInformation(“上传完成”);
返回result.Guid;
}
希望这对您有所帮助。您似乎不理解我的问题,manoj,让我详细说明我的问题。尝试添加其他代码。您可以从第一个API调用此私有方法将文件上载到其他API。