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);
- }
ASP.NET Web API 中的返回数据格式以及依赖注入的更多相关文章
- 能省则省:在ASP.NET Web API中通过HTTP Headers返回数据
对于一些返回数据非常简单的 Web API,比如我们今天遇到的“返回指定用户的未读站内短消息数”,返回数据就是一个数字,如果通过 http response body 返回数据,显得有些奢侈.何不直接 ...
- ASP.NET Web API 2 的返回结果
HttpResponseMessage IHttpActionResult void 某些其他类型 总结归纳 原文地址:https://www.cnblogs.com/xgzh/p/11208611. ...
- ASP.NET Web API中的Controller
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
- 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 ...
- 【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 ...
- 【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理
原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
- ASP.NET Web API中的JSON和XML序列化
ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...
- 目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的创建
目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的创建 通过上面的介绍我们知道利用HttpControllerSelector可以根据 ...
随机推荐
- ASP.NET MVC3 Model的常用验证示例
1.金额(10位整数,2位小数) #region 余额 /// <summary> /// 余额 /// </summary> [DisplayName("余额&qu ...
- spring mvc file upload
文件上传 1.需要导入两个jar包 2.在SpringMVC配置文件中加入 1 2 3 4 <!-- upload settings --> <bean id="multi ...
- 更改jupyter notebook的主题颜色(theme) 包括pycharm
https://blog.csdn.net/Techmonster/article/details/73382535
- 洛谷P4549裴蜀定理
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...
- KnockoutJs学习笔记(十)
event binding主要用于为指定的事件添加相应的处理函数,可以作用于任意事件,包括keypress.mouseover.mouseout等(也包括之前提到的click,根据后面的描述,clic ...
- yum命令简介
yum 一些较常见的用法 命令 功能 yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum ...
- [转] HTML5中meta属性的使用详解
meta属性在HTML中占据了很重要的位置.如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等.虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能够熟 ...
- ModelDriven 和 Preparable 拦截器
Params 拦截器 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueSta ...
- Windows下 ffmpeg + labelImg 提取视频帧 得到图片集 并 标注图片 来 构造数据集
构造数据集的流程 视频文件 >> ffmpeg处理 >> 图片集 >> labelImg进行标注 >> 标注好的数据集 准备ffmpeg ...
- Redis指令与数据结构(二)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...