无法将带有httpClient的流文件发送到web api

时间:2017-07-10 13:20:02

标签: c# .net asp.net-web-api asp.net-web-api2 httpclient

我试图将我在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();
            }

        }

这里我们可以看到screenShot,属性[ReadTimeout]无法访问。 enter image description here

2 个答案:

答案 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#