2013-04-14 139 views
1

我試圖讀取ServiceStack服務中的原始輸入流。我用IRequiresRequestStream標記了DTO,並且執行讀取的代碼,但內容始終顯示爲空白。ServiceStack:原始請求流

在IE9中使用調試模式,我可以看到原始HttpRequest在POST中包含交付後的文本。

下面是從最小的測試服務我的代碼只是爲了顯示內容的閱讀和查詢:

[Route("/qtest")] 
public class QueryTestRequest : IReturn<string>, IRequiresRequestStream 
{ 
    public Stream RequestStream { get; set; } 
} 

public class QueryTestService : Service 
{ 
    public string Any(QueryTestRequest request) 
    { 
     var r = new StringBuilder(); 
     r.Append("<p>This is the query test service:"); 

     r.AppendFormat("<p>Parameter value={0}", base.Request.QueryString["value"]); 

     var postStream = new StreamReader(request.RequestStream); 
     var postContent = postStream.ReadToEnd();   

     r.AppendFormat("<p>Raw Content={0}", postContent); 

     return r.ToString(); 
    } 
} 

缺少什麼我在這裏?

+0

看起來應該可以工作......你是否有讀取流的RequestFilter?可能需要設置RequestStream.Position = 0. – paaschpa

+0

沒有請求過濾器。 – SAJ14SAJ

回答

1

是的,我也覺得很奇怪,但也許是我不明白HttpRequestStream的本質。

反正...我設法使用文件的保持:

var stream = Request.Files[0].InputStream; 

然後你就可以搞定流。

似乎可以上傳多個文件,但我想這將很難包裝到REST框架中。

+0

有趣的..我曾經以爲API是從上傳控件的MIME上傳文件.... *嘆* – SAJ14SAJ