从头编写 asp.net core 2.0 web api 基础框架 (1)
2017-10-08 16:56
746 查看
工具:
1.Visual Studio 2017 V15.3.5+
2.Postman (Chrome的App)
3.Chrome (最好是)
关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架.
我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登录), 所以我一直在等待Identity Server4以及相关库的正式版, 现在匹配2.0的RC版已经有了, 所以这个可以开始编写了.
这个系列就是我从头开始建立我自己的基于asp.net core 2.0 web api的后台api基础框架过程, 估计得分几次才能写完. 如果有什么地方错的, 请各位指出!!,谢谢.
View Code
测试一下, 很成功:
这一点与老.net web api 不一样, 原来的 asp.net web api 默认不适用任何NamingStrategy, 需要手动加上camelcase的转化.
我很喜欢这样, 因为大多数前台框架例如angular等都约定使用camel case.
如果非得把这个规则去掉, 那么就在configureServices里面改一下:
现在就是这样的结果了:
但是还是默认的比较好.
application/json, application/xml等等
如果设定的格式在web api里面没有, 那么web api就会使用默认的格式.
asp.net core 默认提供的是json格式, 也可以配置xml等格式.
目前只考虑 Output formatter, 就是返回的内容格式.
试试: json:
xml:
设置header为xml后,返回的还是json, 这是因为asp.net core 默认只实现了json.
可以在ConfigureServices里面修改Mvc的配置来添加xml格式:
然后试试:
首先不写Accept Header:
然后试试accept xml :
先写这些..............................
1.Visual Studio 2017 V15.3.5+
2.Postman (Chrome的App)
3.Chrome (最好是)
关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架.
我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登录), 所以我一直在等待Identity Server4以及相关库的正式版, 现在匹配2.0的RC版已经有了, 所以这个可以开始编写了.
这个系列就是我从头开始建立我自己的基于asp.net core 2.0 web api的后台api基础框架过程, 估计得分几次才能写完. 如果有什么地方错的, 请各位指出!!,谢谢.
创建项目:
1.选择asp.net core web application.namespace CoreBackend.Api.Services { public class ProductService { public static ProductService Current { get; } = new ProductService(); public List<Product> Products { get; } private ProductService() { Products = new List<Product> { new Product { Id = 1, Name = "牛奶", Price = 2.5f, Materials = new List<Material> { new Material { Id = 1, Name = "水" }, new Material { Id = 2, Name = "奶粉" } } }, new Product { Id = 2, Name = "面包", Price = 4.5f, Materials = new List<Material> { new Material { Id = 3, Name = "面粉" }, new Material { Id = 4, Name = "糖" } } }, new Product { Id = 3, Name = "啤酒", Price = 7.5f, Materials = new List<Material> { new Material { Id = 5, Name = "麦芽" }, new Material { Id = 6, Name = "地下水" } } } }; } } }
View Code
创建子Controller
MaterialController:namespace CoreBackend.Api.Controllers { [Route("api/product")] // 和主Model的Controller前缀一样 public class MaterialController : Controller { [HttpGet("{productId}/materials")] public IActionResult GetMaterials(int productId) { var product = ProductService.Current.Products.SingleOrDefault(x => x.Id == productId); if (product == null) { return NotFound(); } return Ok(product.Materials); } [HttpGet("{productId}/materials/{id}")] public IActionResult GetMaterial(int productId, int id) { var product = ProductService.Current.Products.SingleOrDefault(x => x.Id == productId); if (product == null) { return NotFound(); } var material = product.Materials.SingleOrDefault(x => x.Id == id); if (material == null) { return NotFound(); } return Ok(material); } } }
测试一下, 很成功:
结果的格式
asp.net core 2.0 默认返回的结果格式是Json, 并使用json.net对结果默认做了camel case的转化(大概可理解为首字母小写).这一点与老.net web api 不一样, 原来的 asp.net web api 默认不适用任何NamingStrategy, 需要手动加上camelcase的转化.
我很喜欢这样, 因为大多数前台框架例如angular等都约定使用camel case.
如果非得把这个规则去掉, 那么就在configureServices里面改一下:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { if (options.SerializerSettings.ContractResolver is DefaultContractResolver resolver) { resolver.NamingStrategy = null; } }); }
现在就是这样的结果了:
但是还是默认的比较好.
内容协商 Content Negotiation
如果 web api提供了多种内容格式, 那么可以通过Accept Header来选择最好的内容返回格式: 例如:application/json, application/xml等等
如果设定的格式在web api里面没有, 那么web api就会使用默认的格式.
asp.net core 默认提供的是json格式, 也可以配置xml等格式.
目前只考虑 Output formatter, 就是返回的内容格式.
试试: json:
xml:
设置header为xml后,返回的还是json, 这是因为asp.net core 默认只实现了json.
可以在ConfigureServices里面修改Mvc的配置来添加xml格式:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddMvcOptions(options => { options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter()); }); }
然后试试:
首先不写Accept Header:
然后试试accept xml :
先写这些..............................
相关文章推荐
- 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
- 从头编写 asp.net core 2.0 web api 基础框架 (2)
- 从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
- 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
- 从头编写 asp.net core 2.0 web api 基础框架 (2)
- 从头编写 asp.net core 2.0 web api 基础框架 (3)
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
- 从头编写 asp.net core 2.0 web api 基础框架 (3)
- 从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
- 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- 简易的开发框架(微服务) Asp.Net Core 2.0
- 在 Asp.net core 2.0 的Web Api 添加logging
- 基础教程:ASP.NET Core 2.0 MVC筛选器
- 基础教程:上传/下载ASP.NET Core 2.0中的文件
- asp.net core 2.0 web api基于JWT自定义策略授权
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
- 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入