netcore WeAPI 实现上传文件接口;同时提供通过C#后端使用netcore5.0 调用上传接口的调用示例,使用RestSharp,最后调用示例增加异常捕获以及重试机制
时间: 2024-03-21 22:37:39 浏览: 110
好的,下面是一个示例的netcore WeAPI,用于实现上传文件接口:
```csharp
[HttpPost("upload")]
public async Task<IActionResult> UploadFile()
{
var file = Request.Form.Files[0];
if (file == null || file.Length == 0)
{
return BadRequest("No file found");
}
var filePath = Path.Combine(_config["UploadDirectory"], file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
return Ok();
}
}
```
这个接口使用了HttpPost特性,接收客户端上传的文件,将文件保存到指定的目录中,并返回HTTP状态码200表示上传成功。
下面是一个使用RestSharp调用上述接口的示例代码,并增加了异常捕获和重试机制:
```csharp
public class FileUploader
{
private readonly string _uploadUrl;
private readonly int _maxRetryTimes;
public FileUploader(string uploadUrl, int maxRetryTimes = 3)
{
_uploadUrl = uploadUrl;
_maxRetryTimes = maxRetryTimes;
}
public bool UploadFile(string filePath)
{
var retryTimes = _maxRetryTimes;
while (retryTimes > 0)
{
try
{
var client = new RestClient(_uploadUrl);
var request = new RestRequest(Method.POST);
request.AddFile("file", filePath);
var response = client.Execute(request);
if (response.IsSuccessful)
{
Console.WriteLine("Upload success");
return true;
}
else
{
Console.WriteLine($"Upload failed with status code {response.StatusCode}");
}
}
catch (Exception e)
{
Console.WriteLine($"Exception occurred: {e.Message}");
}
retryTimes--;
Thread.Sleep(1000); // 等待1秒后重试
}
Console.WriteLine("Upload failed");
return false;
}
}
```
这个类的构造方法需要传入上传文件的URL以及最大重试次数(默认为3)。UploadFile方法需要传入要上传的文件路径。在上传文件时,我们使用RestSharp库的Execute方法来发送文件,并检查返回的状态码来判断上传是否成功。如果上传失败或抛出异常,我们会进行重试,最多重试_maxRetryTimes次。如果重试_maxRetryTimes次后仍然上传失败,UploadFile方法会返回false。在重试时,我们使用Thread.Sleep方法等待1秒后再进行重试,以避免服务器过载。
阅读全文