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花样的数据实例教程的细致内容,更多请关注ki4网别的相干文章!