こんにちは、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;
}
}
さまざまな種類のコンテンツを試しましたが、どれも機能していないようで、その理由はわかりません。本当に助かります。
クライアント側では、モデル全体ではなくストリームコンテンツを送信します。
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");
}