我已经准备好WebApi方法来接受文件,如下所示: (例如uri“ https://localhost:44397/api/uploadfile”
[Route("api/[controller]")]
[ApiController]
public class UploadFileController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Post([FromForm] IFormFile file)
{
}
}
我正在使用控制台应用程序将文件发送到此api方法,以下是我的代码:
public static void Send(string fileName)
{
using (var client = new HttpClient())
using (var content = new MultipartFormDataContent())
{
client.BaseAddress = new Uri("https://localhost:44397");
var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
var index = fileName.LastIndexOf(@"\");
var fn = fileName.Substring(index + 1);
fs.Position = 0;
var contentfile = new StreamContent(fs);
content.Add(contentfile, "file", fn);
var result = client.PostAsync("/api/uploadfile", content).Result;
}
}
我还与其他客户端(例如,邮递员)进行了检查,但那里也失败了(因此,这似乎是服务器端而不是控制台应用程序的问题)。
不确定我在做什么错。每当我检查WebApi方法文件参数始终为null时。
任何人都可以帮助我找到解决方案。我尝试搜索博客,但无济于事。我可能在这里做些天真。任何帮助表示赞赏。
答案 0 :(得分:4)
最后我使它工作了。它一定是Microsoft中的错误,否则它们可能会从.net core 2.1 for ApiController更改工作方式。
我将我的WebApi方法更改为以下内容,并确保它有效。
注意:删除了ApiController并且它起作用了。 Microsoft应该对此进行记录。
[Route("api/[controller]")]
public class OCRController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Post([FromForm] IFormFile file)
{
}
}
这可能会帮助像我一样挣扎的人。
答案 1 :(得分:1)
该问题的答案仍然有效,但是对于任何想要保留[ApiController]属性的人,都有一种解决方法,如this GitHub线程中所述。
基本上,尝试像这样扩展[FromForm]属性...
[Route("api/[controller]")]
public class OCRController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Post([FromForm(Name = "file")] IFormFile file)
{
}
}
答案 2 :(得分:0)
尝试对您的MultipartFormDataContent
var contentfile = new StreamContent(fs);
contentfile.Headers.ContentType = MimeMapping.GetMimeMapping(fileName);
content.Add(contentfile, "file", fn);