6

我已经有这个问题好几天了(现在已经解决了,任何遇到这个问题并且正在拔头发的人都注意到了解决方案)。

在我对使用 MVC4 WebAPI 获取数据的 Silverlight 应用程序进行最新一轮代码更改后,我的一个 HttpGet Actions 出现问题,它正在返回IQueryable<oneofmyclasses>. 使用 Fiddler2 观察请求,我可以看到我收到了内部服务器错误 (500),没有正文来解释原因。我的操作中没有收到任何错误。

检查 1:我确认我的 Action 确实return collection.AsQueryable();没有错误。它是

检查 2:我使用此代码验证了我的数据正在序列化为 JSON 且没有错误(g 是我的集合):

var json = new JsonMediaTypeFormatter();
            json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
            ObjectContent<IEnumerable<Model.MenuGroup>> responseContent = new ObjectContent<IEnumerable<Model.MenuGroup>>(g, json); 
            MemoryStream ms = new MemoryStream();

            responseContent.CopyToAsync(ms).Wait();
            ms.Position = 0;
            var sr = new StreamReader(ms);
            var str = sr.ReadToEnd();

这也奏效了。我还使用 XML 格式化程序对其进行了测试,尽管我很确定它只使用过 JSON(不能太小心)。

检查 3:启用 .Net Framework 调试。这次发生错误时(在 HttpApplication.cs 中)VS 2012 捕获了它。

我的错误:

尽管用这些属性标记了属性,

[XmlIgnore]
[IgnoreDataMember]
[JsonIgnore]

.Net Source 正在调用我的一个属性。问题是,它是一个只写属性。我只是添加了

get { return null; }

问题就解决了。

我可能应该先完成检查 3,但我之前对这个错误的经验表明,它通常是尝试序列化我的对象的错误,这就是为什么当它们正确序列化时我有点头疼并且错误坚持。

4

1 回答 1

8

我是如何解决的:

启用 .Net Framework 调试。工具 -> 选项 -> 调试 -> 选中“启用 .NET Framework 源单步执行”

这次发生错误时(在 HttpApplication.cs 中)VS 2012 捕获了它。

于 2012-08-24T16:03:21.170 回答