繁体   English   中英

IIS和RestSharp - >响应正文被切断40x错误?

[英]IIS and RestSharp -> Response body cut off for 40x error?

情况

看起来很简单:我有一个在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

如果我改变什么 ,但(在我的情况下,以406)返回的状态代码,返回同样的数据 ,我看到这一点:

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

现在,65536是一个非常神奇的数字,是宇宙射线的重合或非常可重复的结果。 现在试图聪明并丢弃我的数据,如果它超过无符号短的长度? 我现在尝试潜入RestSharp代码库,但我真的怀疑IIS再次欺骗我。

1:如果这是一个坏主意,请详细说明原因?

看一下这篇文章: RestSharp RestResponse将内容截断为64 kb

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM