2012-05-09 35 views
3

情況IIS和RestSharp - >響應正文中斷40倍的錯誤?

似乎很簡單:我有一個服務上的IIS 7的客戶端數據發佈(應用/ JSON)運行,我驗證數據之前,我接受它。

如果我不接受它,我真的想返回一個406和〜相同的數據作爲身體(潛在改變/糾正)[1]。不幸的是,這導致截斷的響應主體aka無效的json。

要開始,讓我們能夠爲我的錯誤直通,因爲IIS試圖聰明,否則:

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
</httpErrors>

我的代碼的相關部分做的這個道德等價的:

HttpResponseBase response = context.HttpContext.Response; 

response.StatusCode = StatusCode; 
response.StatusDescription = StatusDescription; 

if (!string.IsNullOrEmpty(ContentType)) 
    response.ContentType = ContentType; 
else 
    response.ContentType = "application/json"; 

if (ContentEncoding != null) 
    response.ContentEncoding = ContentEncoding; 

using (var sw = new StreamWriter(response.OutputStream)) 
{ 
    sw.Write(JsonConvert.SerializeObject(Data)); 
} 

在客戶端,我目前在做一個幼稚的(找到與json截斷有關的問題)

var response = myRestClient.Execute(myRestRequest); 

的問題

如果響應返回200狀態碼,我得到這個

response.ContentLength == 69345 
response.RawBytes.Length == 69345 

如果我改變什麼但返回的狀態碼(406在我的情況),返回非常相同的數據,我看到:

response.ContentLength == 69345 
response.RawBytes.Length == 65536 // <--- Not! Good! 

現在,65536是太神奇了,這個數字是宇宙射線的重合或重現性很高的結果。誰的現在試圖變得聰明,如果它的數據長度超過無符號長度,就會丟掉我的數據?我會嘗試潛入RestSharp代碼庫,但我真的懷疑IIS再次與我欺騙..

1:如果這是一個壞主意,請詳細說明原因?

+0

實際內容是否被截斷? –

+0

是的,內容被截斷。但RestSharp(謝謝,順便說一句!)不是從我能看到的。我真的只是通過電線獲得了這個字節數(根據Fiddler)。 –

+0

嗯,我有一個類似的問題,但提琴手顯示從Tomcat服務器返回的完整的JSON內容 - 你有沒有得到任何與此? –

回答

0

就以這個帖子一看:RestSharp RestResponse is truncating content to 64 kb

這是發生,因爲RestSharp使用.NET Framework中HttpWebRequest類。這個類有一個名爲DefaultMaximumErrorResponseLength的靜態屬性。此屬性確定錯誤響應的最大長度,此屬性的默認值爲64Kb。