【问题标题】:Samples not working for Web API Help Page when using an Entity Framework Complex Type in the model在模型中使用实体框架复杂类型时,示例不适用于 Web API 帮助页面
【发布时间】:2013-02-24 03:15:44
【问题描述】:

我有一个包含一些复杂类型的 EF 代码优先模型。生成 Web API 控制器没有任何问题,但是在生成 Web API 帮助页面时,如http://blogs.msdn.com/b/yaohuang1/archive/2012/08/15/introducing-the-asp-net-web-api-help-page-preview.aspx 中所述,则不会生成示例。给出的错误信息是:

使用格式化程序“JsonMediaTypeFormatter”为媒体类型“application/json”生成样本时发生异常。异常消息:出现一个或多个错误。

其他媒体类型也会发生同样的情况。我知道前段时间复杂类型和序列化存在问题,但是当 Json.NET 格式化程序默认包含在 Web API 中时,问题就解决了。

这有关系吗?其他人还有相同的疑问么?有什么想法吗?

【问题讨论】:

    标签: entity-framework serialization asp.net-web-api


    【解决方案1】:

    我的猜测是,这很可能是由于您的模型具有引用循环。例如,您能否通过对 Json 格式化程序进行以下更改来尝试生成帮助页面。您应该会看到生成的示例:

            config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize; 
            config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
    

    此外,如果您不进行上述设置,即使在实际运行时也会看到类似的错误。

    对于 XmlFormatter 和自引用循环,您可以查看 here

    【讨论】:

    • 你完全正确,只是碰巧每个有引用循环的模型也有一个复杂的类型。非常感谢!
    • 你需要把它放在 WebApiConfig.cs 中。
    • 执行此操作时,我仍然感到奇怪的 $ref 和 $id 标签。我找到了一个更好的方法:将子引用上的 get 设置为内部的父引用。来源:truncatedcodr.wordpress.com/2012/09/10/…
    • XMLFormatter 和自引用循环的链接不再起作用
    • @Kiran Challa 请更新有关 XmlFormatter 和自引用循环的链接。谢谢!
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多