本篇涉及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. js实现避免浏览器拦截弹出新页面的方法

    1 问题描述 点击button按钮,提交页面的form表单,后台执行完毕后返回参数,前台页面需要该参数实现跳转,如何实现保留该原来的页面,并在浏览器选项卡新建一个页面,且不被浏览器拦截? 2 方法及问 ...

  2. yum安装失败:ublic key for **.rpm is not installed

    yum install mysql-server --nogpgcheck package_need_to_install

  3. Explain EV in /proc/bus/input/devices data【转】

    转自:https://unix.stackexchange.com/questions/74903/explain-ev-in-proc-bus-input-devices-data It repre ...

  4. HTTPS那-攻击实例与防御

    在<HTTPS-SSL证书>我描述了使用SSL证书时一些需要注意的安全问题,在这一篇文章里面我再演示一下针对HTTPS攻击的一些实例,通过这些实例能更安全的使用HTTPS.知己知彼百战不殆 ...

  5. VS2010上连接SQLite数据库

    VS2010连接SQLite数据库 Visual studio 2010及以上版本,连接SQLite数据库 1.在Sqlite开发站点下载SQLite的.exe安装包 Ctrl+F搜索这条语句:Thi ...

  6. MCS-51 单片机的中断系统

    MCS-51 单片机的中断系统 MCS-51中断系统:5个中断源(两个外部中断, 两个定时器, 一个串口),2个优先级 中断相关概念 中断:当CPU正在处理某件事情时,单片机外部或内部发生的某一紧急事 ...

  7. java多线程整理

    参考博客: http://blog.csdn.net/javazejian/article/details/50878598

  8. NET MVC Bundling and RequireJS

    NET MVC Bundling and RequireJS   高手速来围观帮忙解惑~关于ASP.NET MVC Bundling and RequireJS的取舍问题,最近比较困惑,我希望有一种方 ...

  9. 【LOJ】#2071. 「JSOI2016」最佳团体

    题解 01分数规划,二分加树背包-- 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putch ...

  10. CSS------制作一个带+-的input框

    如图: 代码:(div和input之间要连续写在一起,不能换行) <div style="font-size:36px;margin-top:30px"> <di ...