【发布时间】:2017-06-13 10:00:18
【问题描述】:
我刚刚更新了我的 mvc 服务以包含更大的错误和日志记录。我现在已经多次遇到这个确切的错误。但无法复制。
Unterminated string. Expected delimiter: ". Path 'Breadcrumbs[18].Params', line 1, position 59740. at Newtonsoft.Json.JsonTextReader.ReadStringIntoBuffer(Char quote) at
路径每次都不同,具体取决于用户向服务器发送的内容。
我的 ajax 请求通常如下所示:
$.ajax(myURL("SendBreadcrumbs"), {
type: "POST",
cache: false,
data: { telemetry: telemetry.JSONify(), userID: currentUser, isMyVI: isMyVI }
})
在这些情况下,userID 和 isMyVI(布尔值)不存在,遥测字符串被截断。
JSONify方法如下:
self.JSONify = function () {
var data = ko.mapping.toJSON(self, TelemetryMapping);
return data;
}
这是 knockoutJSs 序列化程序。
服务器端:
public void SendBreadcrumbs(string telemetry, string userID = null, bool isMyVI = true)
{
MyServiceAudit audit;
Guid UserID;
if (Guid.TryParse(userID, out UserID))
audit = InsertAudit(UserID);
else
audit = InsertAudit(null);
try
{
Models.Telemetry data = JsonConvert.DeserializeObject<Models.Telemetry>(telemetry);
Controllers.Telemetry.UpdateTelemetry(data, isMyVI);
}
catch (Exception ex)
{
MyServiceAuditDB.FailAudit(audit.ID, ex.Message + " " + ex.StackTrace);
}
}
我完全被难住了,我尝试使用更大的最大值等更新服务器上的 web.config,以查看它在那一侧被截断。
我在我的 ajax 中唯一的其他区别是 3 分钟的全局超时。
这是否像客户端未处理特殊字符或服务器端限制一样简单,还是数据太大以至于被分块而服务器端不知道等待下一个块?
【问题讨论】:
-
数据有多大?
-
它只要一根字符串tbh。我在反序列化等(HttpContext.Request.Params.ToString())之前记录了http参数。那么其中一个失败的请求是 117,454 个字符长?
-
也刚刚检查过我有这个大小的参数 3,119,214。哪个没有失败?那么我可以排除因大小而截断的情况吗?
-
只是一个关于您的异常处理的 FYI。如果您执行
ex.ToSring(),您将收到消息、堆栈跟踪以及所有内部异常。根据异常,内部异常实际上是您想要帮助解决问题的。 -
谢谢,我会记下来的。
标签: c# jquery ajax iis knockout.js