在Mvc中创建WebApi是所遇到的问题

1.提示"The ‘ObjectContent`1‘ type failed to serialize the response body for content type ‘application/xml; "类似这种的异常

解决方法:

在"WebApiConfig.cs"中添加如下代码

方式一(在"Register"方法中插入如下代码)亲自测试可以:

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
config.Formatters.Remove(config.Formatters.XmlFormatter);

方式二(这个没有测过):

public static class WebApiConfig {

    public static void Register (HttpConfiguration config) {
        JsonMediaTypeFormatter jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().Single();
        jsonFormatter.UseDataContractJsonSerializer = false;
        jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
        jsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        jsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
    }

}

详情参考:http://stackoverflow.com/questions/21046872/prevent-id-ref-when-serializing-objects-using-web-api-and-json-net
时间: 2024-12-27 17:41:39

在Mvc中创建WebApi是所遇到的问题的相关文章

C#MVC中创建多模块web应用程序

当一个应用程序有越来越多的子模块后,应用程序将变得越来越大,复杂度也越来越高,应用程序也越来越难维护.如果把每个子模块,独立分成不同的web应用程序,则这个项目将易于维护.关于这个的好处,我也描述得不好.总之,模块分开,不同程序员的不同模块,不互相影响,一个庞大的项目,如果分为多个Web应用程序,那将更容易维护. 那么,如何将一个大的web应用程序,分成多个不同的web应用程序呢. 直接记录实现过程: 1.首先,我们创建一个主项目,其他分离项目,都将通过这个主项目为路口.如图所示,我们创建一个W

mvc中的webapi

MVC中 webapi的使用 和 在其他网站中如何来调用(MVC) 1.webapi的路由规则注册在App_Start\WebApiConfig.cs文件中 2.webapi控制器继承父类 apiController 3.调用webapi的方式:   get请求http://localhost/api/home/1 则默认请求 Home控制器下的Get方法将1作为get()方法的参数   Post请求http://localhost/api/home/1 则默认请求 Home控制器下的Post方

mvc方式创建webAPI 解决跨域问题

方法在Win10 + VS2017(MVC5)测试通过 1.建立 WebApi项目: 输入项目名称和位置,确定,进入模板选择页面. 选择 WEB API 模板(选择Web API 时会添加对MVC 的支持) 2.添加ApiController 查看生产的目录结构,发现WebAPI 的结构和普通MVC程序结构是非常类似的. 默认VS会在Controllers 文件夹下创建一个示例控制器: ValuesController 通过查看该控制器代码,发现WebAPI的控制器与MVC控制器的主要区别: 1

在 ASP.NET MVC 中创建自定义 HtmlHelper

在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些像WebForm中的控件,只需传入一些参数即可生成相应的HTML代码.本文将介绍创建HtmlHelper的方法. Html.Textbox方法的返回值是MvcHtmlString,它生成了一些HTML代码.创建HtmlHelper,就像在生成HTML代码.下面以一个带有简要描述功能的链接HtmlHe

asp.net mvc中包含webapi时,token失效产生302的解决方案

public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuth

Asp.net MVC 4新项目中创建area的后续操作

Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具体步骤: 1. 检查早Global.asax和\App_Start\RouteConfig.cs中是否已经自动添加了AreaRegistration.RegisterAllAreas();如不存在,进入第2步,否则第3步 2. 在\App_Start\RouteConfig.cs中,添加AreaRe

[转]在 ASP.NET MVC 4 中创建为移动设备优化的视图

原文链接 https://msdn.microsoft.com/zh-cn/magazine/dn296507.aspx 如果深入探讨有关编写移动设备网站的常识性考虑因素,会发现其中有一种内在矛盾. 一方面,客户在其编写应用程序和网站的方法中强烈要求(或乐于要求)移动优先. 另一方面,同一些人又经常称赞 CSS 媒体查询和流体布局. 我所发现的矛盾在于经常利用 CSS 媒体查询和流体布局并未在其他内容之前优先处理移动方面,它不是一种移动优先的方法. 在本文中,我将介绍如何使用服务器端逻辑为给定设

ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败

在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加在Model里面.) 第一步:引用下面这个命名空间 第二步:添加验证 第三步:启动调试,出现以下问题: 解决方法: 超链接中包含了解决这个问题的详细介绍,也就是通过Code First数据库迁移的方式让Entity Framework帮助我们自动调整数据库里面的架构. 解决这个问题最简单的方法就是将

MVC.Net:MVC.Net与WebAPI的IOC实现

我们通过Ninject(http://www.ninject.org/)项目来帮助我们实现MVC.Net与WebAPI项目的IOC实现. 首先我们来看MVC.Net的IOC实现. 1. 通过NuGet我们安装Ninject.MVC3,它会同时安装Ninject.Ninject.Web.Common和Ninject.Web.Common.WebHost.不用被它的名字干扰,它对MVC.Net 5也是适用的. 2. 安装成功后,在MVC.Net的App_Start目录中会多出一个NinjectWeb