web-dev-qa-db-ja.com

ASP.NET Core Web APIのポストストリーム

こんにちは、Stack Overflowの素敵な人々。昨日以来、問題があり、ブラウジングしていたSO以降。UWPクライアントとASP.NET Core Web Apiがあります。WebAPIにストリームを送信したいのですが、実際にこれは私が思っていたよりも難しい仕事でした。

プロパティが1つしかないクラスがあります。以下に示すように、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;
    }
}

さまざまな種類のコンテンツを試しましたが、どれも機能していないようで、その理由はわかりません。本当に助かります。

16
Hasan Hasanov

クライアント側では、モデル全体ではなくストリームコンテンツを送信します。

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");
}
13
Nkosi