webapi状态返回php,让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().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();// Web API 路由config.MapHttpAttributeRoutes();
完整代码如下:/// /// 配置WebApi/// /// 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().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;
}
{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;
}
为什么会出现这种现象呢,⼤家看看我们开始在配置WebAPI的路由规则,规则是api/{controller}/{id} ,也就是说此规则不会去匹配action 的名称,⽽是根据传⼊的参数类型和个数来决定的。
7.那么如何让WebAPI 根据⽅法名称来匹配呢,让我们来修改⼀下路由规则,代码如下:config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);phpjson格式化输出
结果:
测试通过。
这⾥仅作整理,加深印象,以防⾃⼰忘记。如有不正确的地⽅,欢迎不吝指教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论