我正在使用ASP.NETMVC5Web Api.我想咨询我所有的用户.

我写了api/users封信,收到了:

"ObjectContent`1'类型未能序列化内容类型'application/json;charset=utf-8'的响应正文"

在WebApiConfig中,我已经添加了以下行:

HttpConfiguration config = new HttpConfiguration();
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 

但它仍然不起作用.

我的返回数据功能如下:

public IEnumerable<User> GetAll()
{
    using (Database db = new Database())
    {
        return db.Users.ToList();
    }
}

推荐答案

当涉及到从Web Api(或任何其他Web服务)将数据返回给消费者时,我强烈建议不要传回来自数据库的实体.使用能够控制数据外观而不是数据库的模型更可靠、更易于维护.这样,您就不必在WebApiConfig中过多地处理格式化程序.您只需创建一个以子模型为属性的UserModel,并go 掉返回对象中的引用循环.这让连载程序更快乐.

此外,如果您只是在请求中指定"Accept"头,则通常不需要删除格式化程序或支持的媒体类型.玩弄那些东西有时会让事情变得更混乱.

例子:

public class UserModel {
    public string Name {get;set;}
    public string Age {get;set;}
    // Other properties here that do not reference another UserModel class.
}

Asp.net相关问答推荐

如何从 ASP.NET 中的代码隐藏文件访问 IFRAME?

在 lambda 表达式中否定 Func

IE10 SCRIPT5009:__doPostBack未定义

如何从以特定名称开头的 appsettings 键中获取所有值并将其传递给任何数组?

如何使用 ASP.NET Identity 创建用户并获取新创建的 ID

无法加载文件或程序集 'System.Web.Mvc,版本 = 3.0.0.0,Elmah.MVC 问题

如何更改 .ASPX 自动格式化设置 (Visual Studio)

Web Api 请求内容在操作过滤器中为空

IIS 7.5 上没有 asp.net 功能

免费的 ASP.Net 和/或 CSS 主题

以编程方式添加跨度标签,而不是标签控件?

ASP.NET 日期时间 Select 器

使用 jQuery 调用 ASP.NET PageMethod/WebMethod - 返回整个页面

如何针对异常需求自定义 ASP.NET Web API AuthorizeAttribute

IIS Express 安装目录在哪里?

如何避免 ASP.NET MVC 中的 HttpRequestValidationException 呈现导致异常的相同视图

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

将 html 标记从 jquery 发布调用发送到 asp.net 页面时,从客户端检测到潜在危险的 Request.QueryString 值

如何清除 System.Runtime.Caching.MemoryCache

配置授权服务器端点