本篇涉及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. Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层【转】

    转自:http://blog.csdn.net/droidphone/article/details/7497787 在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本 ...

  2. Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解【转】

    转自:http://blog.csdn.net/laoliu_lcl/article/details/39972459 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不 ...

  3. oracle日期、转换函数

    转换函数 日期类型转换成字符类型 select to_char(sysdate) s1, --14-3月 -16        to_char(sysdate, 'yyyy-mm-dd') s2, - ...

  4. three.js 初探

    2014年3月3日 22:18:40 简单旋转立方体: http://blog.163.com/hailin_xin/blog/static/21816219020136103402812 简单球体入 ...

  5. Go语言之Windows 10开发工具LiteIDE初步使用

    Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64,LiteIDE X34.1 在RUNOOB.COM的Go语言教程 ...

  6. Android工程方法数超过65535的解决办法

    Error:Execution failed for task ':ttt:transformClassesWithDexForDebug'.com.android.build.api.transfo ...

  7. [转] caffe激活层及参数

    在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...

  8. java innerclasses(内部类)

    可以将一个类定义在另一个类的内部,这就是内部类 创建内部类的方式---把类的定义置于外部类的里面 典型的情况是,外部类将有一个方法,该方法返回一个指向内部类的引用,就像在to()和contents() ...

  9. js防止sql注入的参数过滤

    js防止sql注入的参数过滤 <script language="javascript"> <!-- var url = location.search; var ...

  10. django用户系统的测试,蛮不错的。

    https://blog.csdn.net/orangleliu/article/details/51944758 这个很实用 https://www.cnblogs.com/yanhuidj/p/1 ...