IIS和RestSharp - >响应机构切断40x错误?

时间:2012-05-09 16:11:47

标签: c# asp.net-mvc-3 iis iis-7 restsharp

情况

似乎很容易:我在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:如果这是一个坏主意,请详细说明原因?

1 个答案:

答案 0 :(得分:0)

看一下这篇文章:RestSharp RestResponse is truncating content to 64 kb

这是因为RestSharp使用.NET Framework中的HttpWebRequest类。该类有一个名为DefaultMaximumErrorResponseLength的静态属性。此属性确定错误响应的最大长度,此属性的默认值为64Kb。