ASP.NET Web API 中的返回数据格式以及依赖注入
本篇涉及ASP.NET Web API中的返回数据合适和依赖注入。
获取数据
public IEnumerable<Food> Get()
{
var results = reop.GetAllFoods()
.OrderBy(f => f.Description)
.Take()
.ToList();
return results;
}
默认情况下,ASP.NET API控制器方法返回json数据格式。在请求的时候可以要求其它的格式,比如:
User-Agent:Fiddler
Host:localhost:8000
Accept:text/xml
请求数据也可以要求多个格式,比如:
User-Agent:Fiddler
Host:localhost:8000
Accept:text/xml, applicaiton/json, text/html
此时,服务端首先查看客户端所能接受的类型数组,然后与服务端能接受的类型数组匹配,而服务端优先默认返回json,所以,以上请求返回json数据。返回的json数据类似如下:
Description:'dddd'
也就是首字母大写。如何让首字母变成小写呢?
当然可以通过让视图模型的属性名第一个字母小写而实现。不过,还可以自定义Formatter。
自定义返回数据的格式
在WebApiConfig.cs文件中。
using Newtonsoft.Json.Serialization; public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
); var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
此时, 返回的数据格式大致是:
description:'dddd'
依赖注入 Dependency Injection
比如在controller中,我们希望通过构造函数注入repoitory接口。
public class FoodsController : ApiController
{
IFoodRepository _reop; public FoodsController(IFoodRepository reop)
{
_repo = repo;
}
}
此时运行会报错:System.InvalidOperaitonException
如何让API支持这种通过构造函数的依赖注入呢?
安装Ninject.MVC3
安装后,会在App_Data文件中多了一个NinjectWebCommon类。在其RegisterServices中可以注册依赖。
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IFoodRepository>().To<FoodRepository>();
}
在这里,我们告诉IOC Container, 当有请求过来要求IReposiotory的时候,就返回Repository实例。
最后,我们需要告诉API Ninject的存在。
NinjectWebCommon类的CreateKernel方法中。
安装WebApiContrib.IoC.Ninject
using WebApiContrib.IoC.Ninject;
... private static IKernel Createkernel()
{
var kernel = new StandardKernel(); //支持API
GlobalConfiguraiton.Configuration.DependencyResolver = new NinjectResolver(kernel);
}
最新文章
- 深究标准IO的缓存
- 使用 shell 脚本实现 LANMP 一键安装
- 51nod 1459 迷宫游戏(dij)
- 【转】${sessionScope.user}的使用方法
- CSS3伪类
- Domain Name System (DNS)
- unity3d游戏开发——新手引导
- 用spring-data-redis实现类似twitter的网站(转)
- vue和mpvue
- Linux基础 - 系统优化及常用命令
- FeathersJS简单使用指南,一个前端也能玩得转的后端框架
- 出现No package gcc+ available解决办法
- C/C++常见错误
- Android自定义多宫格解锁控件
- ABAP-折叠窗口
- Knowledge Point 20180308 拔下forEach的外衣
- js日期date对象
- PC 微信页面倒计时代码 safari不兼容date的问题
- 【nginx下对服务器脚本php的支持】
- InputStream写文件出现大量NUL