本篇涉及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);
}

ASP.NET Web API 中的返回数据格式以及依赖注入的更多相关文章

  1. 能省则省:在ASP.NET Web API中通过HTTP Headers返回数据

    对于一些返回数据非常简单的 Web API,比如我们今天遇到的“返回指定用户的未读站内短消息数”,返回数据就是一个数字,如果通过 http response body 返回数据,显得有些奢侈.何不直接 ...

  2. ASP.NET Web API 2 的返回结果

    HttpResponseMessage IHttpActionResult void 某些其他类型 总结归纳 原文地址:https://www.cnblogs.com/xgzh/p/11208611. ...

  3. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  4. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  5. Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

  6. 【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie

    原文:[ASP.NET Web API教程]5.5 ASP.NET Web API中的HTTP Cookie 5.5 HTTP Cookies in ASP.NET Web API 5.5 ASP.N ...

  7. 【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理

    原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...

  8. ASP.NET Web API中的JSON和XML序列化

    ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...

  9. 目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的创建

    目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的创建 通过上面的介绍我们知道利用HttpControllerSelector可以根据 ...

随机推荐

  1. Pandas DataFrame数据的增、删、改、查

    Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...

  2. [golang note] 环境搭建

    LiteIDE(windows) • golang安装 ▶ 下载对应操作系统的版本并安装,下载地址:http://www.golangtc.com/download,譬如这里下载的是go1.6.win ...

  3. C++ Primer读书笔记(3)

    vector: 本科时学C++的时候没学过vector,正好补一下. 第一个要注意的地方是要正确区分列表初始值还是元素数量. 第二点是不能使用范围for向vector对象添加元素,范围for语句体内不 ...

  4. java 异常使用指南

    应该在以下情况使用异常: 1.)在恰当的级别处理问题.(在知道如何处理的情况下才捕获异常) 2.)解决问题并且重新调用异常的方法 3.)进行少许的修补,然后绕过异常发生的地方继续执行 4.)用别的数据 ...

  5. Nginx安装及常用命令

    一.选定源码目录 cd /usr/local/src 可以是任何目录,本文选定的是/usr/local/src 二.安装依赖库 yum install gcc yum install pcre-dev ...

  6. hdu 5441 (2015长春网络赛E题 带权并查集 )

    n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排 ...

  7. C++ 编程错误记录

    C3646 未知重写说明符 两个头文件相互引用造成的问题

  8. ps -aux与ps -ef

    ps -aux与ps -ef这两个命令显示的结果是差不多的. 不同之处就是显示风格不同,前者是BSD风格,后者SYSTEM V(其实我不太明白这尼玛风格是什么跟什么,我看起来都差不多啊) 然后重要的不 ...

  9. H5判断网络状态

    1.判断网络连接的网络状态 if (navigator.onLine) { alert('online')} else { alert('offline');} 想要监听浏览器的联网状态, 使用win ...

  10. Java日期时间类

    日期时间类有三种: 一.java.util.Date:一般用于声明日期时间类型的变量. 二.java.sql.Date:一般用于数据库日期时间的映射. 三.java.util.Calendar:一般用 ...