我试图将我在C#中的集成测试项目中的基本文件发送到web api。 但我不知道为什么,每次打电话都会有例外。
Json.JsonSerializationException:从' ReadTimeout'获取值时出错on' System.Io.FileStream'
我发现这个属性无法读取,所以也许这就是为什么我的httpclient无法序列化它。 那么如何将文件发送到网络API?
这是我的客户代码:
using (StreamReader reader = File.OpenText("SaveMe.xml"))
{
response = await client.PostAsJsonAsync($"api/registration/test/", reader.BaseStream);
response.EnsureSuccessStatusCode();
}
我的控制器:
[Route("api/registration")]
public class RegistrationController : Controller
{
[HttpPost, Route("test/")]
public ActionResult AddDoc(Stream uploadedFile)
{
if (uploadedFile != null)
{
return this.Ok();
}
else
{
return this.NotFound();
}
}
答案 0 :(得分:2)
我不确定他们是否仍然支持.NET Core中的PostAsJsonAsync
。因此,我决定使用PostAsync
重写您的代码段:
using (StreamReader reader = File.OpenText("SaveMe.xml"))
{
var response = await client.PostAsync($"api/registration/test/", new StreamContent(reader.BaseStream));
}
将您的API方法更新为:
[Route("api/registration")]
public class RegistrationController : Controller
{
[HttpPost, Route("test/")]
public ActionResult AddDoc()
{
//Get the stream from body
var stream = Request.Body;
//Do something with stream
}
答案 1 :(得分:0)
首先,你必须从文件中读取所有数据,然后才发送它。要打开.xml
文件,请使用XmlReader
。看这里Reading Xml with XmlReader in C#