情况
似乎很容易:我在IIS 7上运行了一个服务。客户端POSTS数据(application / json)我在接受之前验证了数据。
如果我不接受它,我真的想要返回406和〜相同的数据作为正文(可能已更改/更正)[1]。不幸的是,这导致截断的响应主体也称为无效的json。
首先,让我们为我的错误启用passthrough,因为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
如果我更改 nothing 但返回的状态代码(在我的情况下为406),返回非常相同的数据,我看到了:
response.ContentLength == 69345
response.RawBytes.Length == 65536 // <--- Not! Good!
现在,65536是一个非常神奇的数字,是宇宙射线的重合或非常可重复的结果。谁现在试图变聪明并丢弃我的数据,如果它超过无符号短的长度?我现在尝试深入了解RestSharp代码库,但我真的怀疑IIS再次欺骗我..
1:如果这是一个坏主意,请详细说明原因?
答案 0 :(得分:0)
看一下这篇文章:RestSharp RestResponse is truncating content to 64 kb
这是因为RestSharp使用.NET Framework中的HttpWebRequest类。该类有一个名为DefaultMaximumErrorResponseLength的静态属性。此属性确定错误响应的最大长度,此属性的默认值为64Kb。