首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET核心Web Api中的Post流

ASP.NET核心Web Api中的Post流
EN

Stack Overflow用户
提问于 2017-02-16 18:57:49
回答 1查看 16.3K关注 0票数 19

你好,可爱的Stack Overflow的人们。从昨天开始,我遇到了一个问题,从那时起,我就一直在浏览。我有一个UWP客户端和ASP.NET核心网络应用程序接口。我只想向我的web api发送一个流,但这确实比我想象的更难。

我有一个只有一个属性的类。如下所示,Stream属性:

代码语言:javascript
运行
复制
public class UploadData
{
    public Stream InputData { get; set; }
}

下面是我的Web Api中的代码:

代码语言:javascript
运行
复制
// POST api/values
[HttpPost]
public string Post(UploadData data)
{
    return "test";
}

我试着从正文中读取流,但结果是一样的。我可以命中post方法,UploadData不为空,但我的InputData始终为null

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

代码语言:javascript
运行
复制
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;
    }
}

我尝试了各种内容类型,但似乎都不起作用,我也不知道为什么。我真的很感激所有的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 22:58:10

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

代码语言:javascript
运行
复制
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阻塞调用与异步调用混为一谈。这些往往会导致死锁。

在服务器更新操作时

代码语言:javascript
运行
复制
// POST api/values
[HttpPost]
public IActionResult Post() {
    var stream = Request.Body;
    return Ok("test");
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42271947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档