Post ASP.NET 核心网站 Api 中的流

Post Stream in ASP.NET Core Web Api

大家好,Stack Overflow 的可爱的人们。 从昨天开始,我遇到了问题,从那以后我一直在浏览 SO。 我有一个 UWP 客户端和 ASP.NET Core Web Api。我只想将流发送到我的网站 api 但实际上这比我想象的要难。

我有一个 class 而我只有一个 属性。 Stream 属性 如下所示:

public class UploadData
{
    public Stream InputData { get; set; }
}

那么这是我的 Web 代码 Api:

// POST api/values
[HttpPost]
public string Post(UploadData data)
{
    return "test";
}

我尝试从正文中读取流,但结果是一样的。 我可以点击 post 方法 UploadData 不为空但是我的 InputData 总是 null.

这是我的 post 请求的 UWP 代码。

private async void PostStreamButton_OnClick(object sender, RoutedEventArgs e)
{
    using (var client = new HttpClient())
    {
        var dummyBuffer = new UnicodeEncoding().GetBytes("this is dummy stream");
        var dummyStream = new MemoryStream(dummyBuffer).AsRandomAccessStream().AsStream();

        var requestContent = new MultipartFormDataContent();
        var inputData = new StreamContent(dummyStream);
        inputData.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        requestContent.Add(inputData, "inputData");

        HttpResponseMessage response = client.PostAsync("url", inputData).Result;
    }
}

我尝试了各种内容类型,其中 none 似乎有效,但我不知道为什么。非常感谢所有帮助。

在客户端发送流内容而不是整个模型。

private async void PostStreamButton_OnClick(object sender, RoutedEventArgs e) {
    using (var client = new HttpClient()) {
        var dummyBuffer = new UnicodeEncoding().GetBytes("this is dummy stream");
        var dummyStream = new MemoryStream(dummyBuffer).AsRandomAccessStream().AsStream();

        var inputData = new StreamContent(dummyStream);

        var response = await client.PostAsync("url", inputData);
    }
}

注意:不要将 .Result 阻塞调用与异步调用混用。那些往往会导致死锁。

在服务器更新操作中

// POST api/values
[HttpPost]
public IActionResult Post() {
    var stream = Request.Body;
    return Ok("test");
}