2017-02-16 22 views
11

Hoş insanlar Stack Overflow. Dünden beri bir sorunum var ve o zamandan beri SO göz atıyorum. UWP İstemcisi ve ASP.NET Çekirdek Web API'm var. Sadece web api'ime bir akış göndermek istiyorum ama aslında bu düşündüğümden daha zor bir işti.ASP.NET Çekirdek Web'de Sondan Aktarım Web Api

Yalnızca bir mülküm olan bir sınıfa sahibim. Aşağıda görebileceğiniz gibi Stream özelliği:

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

Sonra İşte benim Web Api benim kodudur:

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

ben beden itibaren akışı okumaya çalıştık ancak sonuç aynıdır. UploadData numaralı ileti yöntemine null değdiremiyorum ama InputData benim için her zaman null.

İşte UWP'nin posta isteği kodudur.

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; 
    } 
} 

Hiçbirinin çalışmadığı çeşitli içerik türlerini denedim ve nedenini bilmiyorum. Tüm yardımı gerçekten takdir ederim.

cevap

8

İstemci tarafında akış içeriği, tüm modeli değil.

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); 
    } 
} 

NOT: zaman uyumsuz görüşmeleri ile .Result engelleme çağrıları karıştırmayın. Bunlar çıkmazlara sebep oluyor. Sunucu güncelleme eylemi

// POST api/values 
[HttpPost] 
public IActionResult Post() { 
    var stream = Request.Body; 
    return Ok("test"); 
} 
+1

Merhaba, benim Request İçerik özelliği yok. Sadece vücudum var. –

+2

@HasanHasanov, Doğru. Kodum önceki sürüm içindi. Aramanız gereken şey beden. – Nkosi

+0

Eh, hile yaptığı gibi görünüyor. –