返回View

时间:2015-07-22 23:21:48

标签: .net asp.net-mvc stack-overflow

我得到了一个' System.StackOverflowException'将View发送到客户端后,在我的.NET MVC项目中。视图呈现正确,因此客户端看不到任何错误。但是,服务器随后崩溃并出现StackOverflow异常。我只在IISExpress / VisualStudio中测试过,而不是在IIS中测试过。

我在远程服务器上有html文件。我正在加载像这样的html文件:

using (WebClient client = new WebClient() 
{Credentials = new NetworkCredential(Username, Password)})
{
    string html = client.DownloadString(url);
    viewModel.Pages.Add(html);
}

在哪里&#39;页面&#39;可以包含多个html片段。但是,我使用的测试页面是一个完整的html页面,其中包含&#34; doctype&#34;,&#34; head&#34;,&#34; body&#34;等节点。< / p>

在我的视图中,我是这样渲染页面的:

foreach(var page in Model.Pages)
{
    @Html.Raw(page)
}

正如我所说,页面呈现正确,但服务器随后崩溃。我没有看到任何递归调用。我尝试使用Debug Diag工具进行故障排除,但无法填充任何故障转储。

另外,如果我渲染“页面”&#39;如果没有@ Html.Raw(),则不会发生崩溃(但是,页面无法正确渲染。例如,LT / GT括号被&#34;&amp; gt;&#34取代; /&#34;&amp; lt;&#34;,以及其他字符)

我怀疑它可能与“html”的长度有关。字符串或页面的内容。我有另一个站点地图页面更简单,正确加载,并且不会导致服务器错误。

异常也发生在不同的地方:System.Web.dll,mscorlib.dll和System.Runtime.Serialization.dll

如何解决此StackOverflow异常?

可以使用@ Html.Raw()呈现的字符串大小是否有限制?

外部堆栈跟踪:

  

System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlJsonWriter.HasOpenAttribute.get()未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlJsonWriter.WriteState.get()未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlJsonWriter.WriteStartAttribute(string prefix,string localName,string ns)Unknown       System.Xml.dll!System.Xml.XmlWriter.WriteAttributeString(string localName,string value)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonWriterDelegator.WriteInt(int value)未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.IntDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegator writer,object obj,System.Runtime.Serialization.XmlObjectSerializerWriteContext context)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonDataContract.WriteJsonValueCore(System.Runtime.Serialization.XmlWriterDelegator jsonWriter,object obj,System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context,System.RuntimeTypeHandle declaredTypeHandle)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.WriteDataContractValue(System.Runtime.Serialization.DataContract dataContract,System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,System.RuntimeTypeHandle declaredTypeHandle)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(System.Runtime.Serialization.DataContract dataContract,System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,bool verifyKnownType,System.RuntimeTypeHandle declaredTypeHandle,System.Type declaredType)未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.SerializeWithXsiType(System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,System.RuntimeTypeHandle objectTypeHandle,System.Type objectType,int declaredTypeID,System.RuntimeTypeHandle declaredTypeHandle, System.Type declaredType)未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,bool isDeclaredType,bool writeXsiType,int declaredTypeID,System.RuntimeTypeHandle declaredTypeHandle)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,bool isDeclaredType,bool writeXsiType,int declaredTypeID,System.RuntimeTypeHandle declaredTypeHandle)Unknown       [轻量级功能]
      System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonCollectionDataContract.WriteJsonValueCore(System.Runtime.Serialization.XmlWriterDelegator jsonWriter,object obj,System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context,System.RuntimeTypeHandle declaredTypeHandle)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.WriteDataContractValue(System.Runtime.Serialization.DataContract dataContract,System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,System.RuntimeTypeHandle declaredTypeHandle)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(System.Runtime.Serialization.DataContract dataContract,System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,bool verifyKnownType,System.RuntimeTypeHandle declaredTypeHandle,System.Type declaredType)未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.SerializeWithXsiType(System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,System.RuntimeTypeHandle objectTypeHandle,System.Type objectType,int declaredTypeID,System.RuntimeTypeHandle declaredTypeHandle, System.Type declaredType)未知       System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,bool isDeclaredType,bool writeXsiType,int declaredTypeID,System.RuntimeTypeHandle declaredTypeHandle)Unknown       System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter,object obj,bool isDeclaredType,bool writeXsiType,int declaredTypeID,System.RuntimeTypeHandle declaredTypeHandle)Unknown

从[轻量级功能]到结束的部分重复直到崩溃。

编辑:

在“输出”窗口中找到此错误(以及其他错误):类型&#39; System.UnauthorizedAccessException&#39;的第一次机会异常。发生在mscorlib.dll

1 个答案:

答案 0 :(得分:0)

通过返回&#39;内容&#39;解决了这个问题。而不是观看(模特)&#39;。

以前,我将html字符串添加到ViewModel并通过返回呈现页面:

return View(model);

当我将返回更改为Content时,服务器没有崩溃。

return Content(htmlString);