首页 文章

MVC 4 Web API OData奇怪的结果

提问于
浏览
1

我之前使用以下代码使我的Web API控制器正常工作:

[Queryable(ResultLimit = 30)]
    public IQueryable<Lead> Get()
    {
        return _db.Leads;
    }

然后我在我的Leads表上添加了一个外键 . 我收到了JSON循环错误 . 所以我决定只选择我需要从控制器返回的字段 . 以下是代码示例:

[Queryable(ResultLimit = 30)]
    public IQueryable<dynamic> Get()
    {
        return _db.Leads.Select(x => new
                                    {
                                        x.FirstName,
                                        x.LeadTypeID,
                                        x.DateSent
                                    }).AsQueryable();
    }

当我通过我的应用程序或终端调用api时,结果或正确返回 . 但是,当我将网址粘贴到浏览器(Chrome)中时,我收到服务器500错误 . 猜测XML而不是JSON错误 . 它在添加关系之前有效 . 我想解决上一个问题,但这并不重要 . 关注的领域是返回数据,但我的OData过滤器被忽略 .

非常感谢您的帮助 .

1 回答

  • 1

    内置的XML序列化程序不支持匿名类型,这就是您获得运行时异常的原因 . 有三种方法可以解决这个问题:

    • 创建自定义POCO以返回而不是匿名类型 .

    • 您可以删除XML序列化程序,让您的应用程序始终返回JSON . 您可以通过将: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 添加到global.asax.cs文件的Application_Start()方法来禁用序列化程序 .

    • 您可以选择支持匿名类型的其他XML Serializer . 我不确定那里有几个 .

相关问题