2017-02-16 126 views
11

你好可爱的人堆栈溢出。 由于昨天我有一个问题,我从那以后一直在浏览。 我有一个UWP客户端和ASP.NET核心Web API。我只是想发送一个流到我的web api,但事实上这是比我想象的更困难的任务。ASP.NET核心Web API中的后期流

我有一个类,我只有一个属性。该Stream财产,你可以看到如下:

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

那么这里是从我的网络API我的代码:

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

我试图读取流从身体,但结果是一样的。 我可以点击帖子方法UploadData不为空,但我的InputData总是null

这是我的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; 
    } 
} 

我已经尝试过各种内容类型,它们都不起作用,我不知道为什么。我真的很感激所有的帮助。

回答

8

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

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"); 
} 
+1

您好,我没有在我的请求内容属性。我只有身体。 –

+2

@HasanHasanov,你是对的。我的代码是以前的版本。身体是你应该寻找的。 – Nkosi

+0

好吧,它看起来就是这样做的。 –