Post Stream в ASP.NET Core Web Api
Здравствуйте, милые люди из Stack Overflow. Со вчерашнего дня у меня есть проблема, и я просматривал ТАК с тех пор. У меня есть клиент UWP и ASP.NET Core 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;
}
}
Я пробовал различные типы контента, который, кажется, не работает ни один из них, и я понятия не имею, почему. Я был бы очень признателен за всю помощь.
1 ответ
На стороне клиента отправьте потоковое содержимое не всей модели.
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");
}