Подтвердить что ты не робот

Поток потока в ASP.NET Core Web Api

Привет, милые люди из. Со вчерашнего дня у меня проблема, и с тех пор я просматриваю SO. У меня есть клиент UWP и ASP.NET Core Web Api. Я просто хочу отправить поток в свою веб-api, но на самом деле это было сложнее, чем я думал.

У меня есть класс, у которого есть только одно свойство. Свойство Stream, как вы можете видеть ниже:

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

Тогда Вот мой код из моего Web Api:

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

Я попытался прочитать поток Из тела, но результат тот же. Я могу нажать метод post UploadData не null, но мой 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;
    }
}

Я пробовал различные типы контента, которые ни одна из них не работает, и я понятия не имею, почему. Я бы очень признателен за всю помощь.

4b9b3361

Ответ 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");
}