您好,欢迎访问一九零五行业门户网

让WebAPI 返回JSON格式的数据实例教程

在restful风格盛行的年代,对接接口大多数人会选择使用json,xml和json的对比传送(),看看这位博主是怎么说的,虽然最后没有说完,我想大概也能略微解决心中的疑惑。
1.其实要想让webapi 返回json格式的数据很简单,只要在configurewebapi方法中配置一下即可。此前需要引用两个命名空间。
using newtonsoft.json.serialization;using system.linq;
2.核心代码如下:
var json = config.formatters.jsonformatter;// 解决json序列化时的循环引用问题json.serializersettings.referenceloophandling = newtonsoft.json.referenceloophandling.ignore;// 移除xml序列化器config.formatters.remove(config.formatters.xmlformatter);//设置序列化方式为驼峰命名法var jsonformatter = config.formatters.oftype<system.net.http.formatting.jsonmediatypeformatter>().first();  jsonformatter.serializersettings.contractresolver = new camelcasepropertynamescontractresolver();//  web api 路由config.maphttpattributeroutes();
完整代码如下:
        /// <summary>/// 配置webapi/// </summary>/// <param name="app"></param>public void configurewebapi(iappbuilder app)         {//创建一个http的实例配置var config = new httpconfiguration();var json = config.formatters.jsonformatter;// 解决json序列化时的循环引用问题json.serializersettings.referenceloophandling = newtonsoft.json.referenceloophandling.ignore;// 移除xml序列化器            config.formatters.remove(config.formatters.xmlformatter);//设置序列化方式为驼峰命名法var jsonformatter = config.formatters.oftype<system.net.http.formatting.jsonmediatypeformatter>().first();             jsonformatter.serializersettings.contractresolver = new camelcasepropertynamescontractresolver();//  web api 路由            config.maphttpattributeroutes();//映射路由            config.routes.maphttproute(                 name: defaultapi,                 routetemplate: api/{controller}/{id},                 defaults: new { id = routeparameter.optional }             );//将配置注入owin管道中            app.usewebapi(config);         }
3.接下来让我们来测试一下,添加一个名为productcontroller的controller,删掉所有的方法,添加一个getproductlist方法,代码如下:
       [httpget]public httpresponsemessage getproduct()         {var product = new { id = 1, name = 三星王炸 };             httpresponsemessage result = new httpresponsemessage();             result.content = new stringcontent(jsonconvert.serializeobject(product), encoding.getencoding(utf-8), application/json);return result;         }
4.在浏览器中输入http://localhost:27650/api/product/getproduct ,输出结果为
5.我们发现如果在浏览器中输入http://localhost:27650/api/product 同样也可以获得返回值,让我们来简单改造一下重新再写一个新方法
        [httpget]public httpresponsemessage getproduct2(string id)         {var product = new { id = id, name = 三星王炸 };             httpresponsemessage result = new httpresponsemessage();             result.content = new stringcontent(jsonconvert.serializeobject(product), encoding.getencoding(utf-8), application/json);return result;         }
6.在浏览器中输入http://localhost:27650/api/product?id=3 和 http://localhost:27650/api/product 得到的结果分别为
为什么会出现这种现象呢,大家看看我们开始在配置webapi的路由规则,规则是api/{controller}/{id} ,也就是说此规则不会去匹配action的名称,而是根据传入的参数类型和个数来决定的。
7.那么如何让webapi 根据方法名称来匹配呢,让我们来修改一下路由规则,代码如下:
config.routes.maphttproute(                 name: defaultapi,                 routetemplate: api/{controller}/{action}/{id},                 defaults: new { id = routeparameter.optional }             );
8.让我们再测试一下,浏览器中输入http://localhost:27650/api/product,看一下效果。
再输入http://localhost:27650/api/product/getproduct 和 http://localhost:27650/api/product/getproduct?id=5,发现两个返回的结果一样,说明访问的是同一个方法。
再输入http://localhost:27650/api/product/getproduct2 和 http://localhost:27650/api/product/getproduct2?id=6
结果:
测试通过。
这里仅作整理,加深印象,以防自己忘记。如有不正确的地方,欢迎不吝指教。
以上就是让webapi 返回json格式的数据实例教程的详细内容。
其它类似信息

推荐信息