为了让ASP.NET Core Web API 支持HATEOAS, 得需要自己手动编写代码实现....接下来是自定义的标识,也可能还包括额外的值,这里我是用的是公司名,随后是hateoas表示返回的响应里面要包含链接。 最后是一个“+json”。...返回的是406,Not Acceptable。 这是因为ASP.NET Core的格式化器并不认识我们这个自定义的媒体类型。 在Startup里面添加这两句话以支持这个媒体类型: ?...然后在两个Action里,我都是用的是application/json这个媒体类型,实际上这个项目里目前大部分的API我都是用的是application/json。...也许在ASP.NET MVC或者一些web网站可以自适应这种变化,如果这些网站的js,html等是从服务器端生成的;但是大多数的时候,其实很难实现这种自适应变化。
ASP.NET Core的基本知识 这部分还是需要简单的介绍下, 如果已经会了, 请略过本文其余部分....创建ASP.NET Core项目 打开VS2017, 选择ASP.NET Core Web Application项目模板, 写好名字, OK. ? 选择空模板, OK: ?...项目建立好了, 结果如下: ? 然后我们看一下项目文件, 右键编辑MyRestful.Api: ? 这里, SDK属性表示了我们使用的是哪个SDK, 而目标框架是.NET Core 2.0....ASP.NET Core还允许我们按约定为指定环境建立单独的启动配置....在ASP.NET Core项目里可以通过多种方式来创建Controller,当然最建议的方式还是通过继承AspNetCore.Mvc.Controller这个抽象类来建立Controller。
html 本文介绍的是使用ASP.NET Core建立Richardson成熟度为2级的伪RESTful web API, 本文介绍的是GET和POST....建立Controller 首先需要建立一个CountryController: ?...处理异常 当Action发生异常的时候,默认情况下ASP.NET Core会返回500: ? ? 但还是自己处理一下比较好,可以在Action里面使用try catch: ?...的情况下,就该返回一个默认的格式,在ASP.NET Core 2.0里面就是application/json。...当请求的media type不可用的时候,并且消费者不支持默认格式,这时服务器就应该返回 406 Not Acceptable 状态码。 ASP.NET Core 支持输出和输入两种格式化器。
html 建立Richardson成熟度2级的POST、GET、PUT、PATCH、DELETE的RESTful API请看这里:https://www.cnblogs.com/cgzl/p/9047626...Cache-Control还有很多其它的指令,常见的几个可以在ASP.NET Core官网上看:https://docs.microsoft.com/en-us/aspnet/core/performance...验证: no-cache, 它表示缓存不可以用存储的响应来满足请求. 源服务器需要重新验证成功并生成响应....这个组件应该位于缓存的后端, ASP.NET Core里有个自带的属性标签 [ResponseCache] (https://docs.microsoft.com/en-us/aspnet/core/performance...ASP.NET Core关于缓存部分的文档在这里:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/?
创建ASP.NET Core项目 打开VS2017, 选择ASP.NET Core Web Application项目模板, 写好名字, OK....ASP.NET Core还允许我们按约定为指定环境建立单独的启动配置....在ASP.NET Core项目里可以通过多种方式来创建Controller,当然最建议的方式还是通过继承AspNetCore.Mvc.Controller这个抽象类来建立Controller。...此外, 用重载的方法, 记录日志时也可以包含异常对象....用REST的术语来说, 我们把客户端请求服务器返回的对象叫做资源(Resources).
(从ASP.NET Core 2.0 迁移至 ASP.NET Core 2.1: https://docs.microsoft.com/en-us/aspnet/core/migration/20_21...在ASP.NET Core里,我要使用Linq来动态组建一个查询的表达式(IQueryable,可以创建表达式树),它是延迟执行的,直到各种条件都判断完了并组建出最终的查询表达式之后才去执行(查询数据库...我使用了这个参数类代替了之前的pageIndex和pageSize参数,因为ASP.NET Core足够智能,可以把这两个参数解析到这个类里面。 下面测试一下: ?...用程序来说就是,一个字符串“Rank asc”要映射成一个集合,而集合元素的类型有两个属性:Entity Model的属性名和排序的方向。 所以先把集合里这种元素的类建立出来: ?...该方法可以在Startup里面调用,从而注册到ASP.NET Core的服务容器里: ? 然后再次修改CountryRepository: ?
这几种方案里Basic提供的保护程度/级别最低, 而Negotiate最高/强. ASP.NET Core可选择的认证提供商就很多了, 例如ASP.NET Core Identity....Base64字符串的组合, 也是用点(.)分开并进行了签名, 如下图: ? ...下面我们需要一个可以生成JWT token的节点, 针对本文我就在本项目里建立这个节点吧: ?...view=aspnetcore-2.1&tabs=visual-studio#require-https), 它建议ASP.NET Core web应用都应该调用HTTPS重定向中间件, 这样就可以把所有的...ASP.NET Core有一个第三方库Swashbuckle,它支持Swagger,但是只支持版本2,版本2有个重要的缺陷就是不支持Action重载,之前HATEOAS的文章里提到过我们需要使用这种重载
ASP.NET Core 预备知识 项目配置 ?...IOptionsSnapshot 的开销很小, 可以放心使用 日志 ASP.NET Core 提供了6个内置的日志提供商。...此外, 用重载的方法, 记录日志时也可以包含异常对象..../cgzl/p/8543772.html 新建立两个.NET Core class library类型的项目: ?...用REST的术语来说, 我们把客户端请求服务器返回的对象叫做资源(Resources).
由于这种原因,PUT用的就比较少,不可能为了更新对象中的一个属性而把对象所有的属性值都传递回去。 所以PATCH(局部更新)就应用的比较广泛了。 PUT不具有安全性,因为每次执行PUT都会改变资源。...验证 为了进行输入验证(不验证输出),我们需要做以下三方面工作: 定义验证规则 检查验证规则 把验证错误信息发送给API的消费者 之前的文章也提到的ASP.NET Core里面定义验证规则的方式: Data...由于ASP.NET Core并没有内置的帮助方法可以返回422和验证错误信息,所以我们先建立一个类用于返回 422 和验证错误信息,它继承于ObjectResult: ?...最后还要为ASP.NET Core配置FluentValidation,在Startup的ConfigureServices方法里: ?...支持ASP.NET Core的第三方Log提供商有很多,NLog,Serilog等等。这里我使用Serilog(https://github.com/serilog/serilog)。
安装 安装 dotnet dev-certs https -trust 移除 sudo dotnet dev-certs https --clean 安装前 安...
背景 最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5) 它颠覆了过去的 ASP.NET。 什么是 ASP.NET Core?...ASP.NET Core 1.0 是一个 ASP.NET 的重构版本,它运行于最新的 .NET Core。...ASP.NET Core 不再只依赖Visual Studio ASP.NET Core 的跨平台,让它不再只依赖 Visual Studio,开发者和设计师们可以在自己喜欢的环境上工作。...另外,ASP.NET Core 也会包含一个叫做 Kestrel 的 Web 服务器,它建立在 libuv 上,主要用于 iOS 和 Linux 操作系统。...以上 ASP.NET Core 1.0 的新特性和新概念的介绍,是为了更好的帮助我们使用 ASP.NET Core 进行开发,同时在开发过程中,我们还可以借助一些好的工具来提高开发效率,并减少代码量,如
在我的上几篇文章中降到了asp.net core的管道模型,为了更清楚地理解asp.net core的管道,再网上学习了.Net Core控制台应用程序对其的模拟,以加深映像,同时,供大家学习参考。...注意是.Net Core的控制台应用程序。 ? 然后新建一个Context类,以模拟ASP.net core中的context类,然后再Context类中添加一个Write方法。...RequestDelegate, RequestDelegate> middleWare) { _list.Add(middleWare); } 再ASP.NET...Core应用程序中,我们经常再Startup.cs中的Config中使用app.Use()方法,这里的Use()就是模仿该app.Use()的方法。...这就是ASP.net core的管道模型的基本原理。
要承载一个ASP.NET Core应用,只需要将GenericWebHostService服务注册到承载系统中即可。...而ASP.NET Core应用下的承载上下文是通过WebHostBuilderContext对象表示的,两个上下文之间的不同之处体现在针对承载环境的描述上,WebHostBuilderContext上下文中的承载环境是通过...ASP.NET Core应用中,源于GenericWebHostBuilder类型ISupportsUseDefaultServiceProvider接口的实现。...ASP.NET Core应用中。...Hosting Startup类型提供的方式将一些工具“附加”到一个ASP.NET Core应用中。
我们知道ASP.NET Core应用的请求处理管道是由一个IServer对象和IHttpApplication对象构成的。...[本文节选自《ASP.NET Core 3框架揭秘》第13章, 更多关于ASP.NET Core的文章请点这里] 目录 一、配置选项:GenericWebHostServiceOptions 二...CancellationToken cancellationToken); public Task StopAsync(CancellationToken cancellationToken); } 三、应用启动流程 由于ASP.NET...Core应用是由GenericWebHostService服务承载的,所以启动应用程序本质上就是启动这个承载服务。...此后,服务器绑定到指定的地址监听抵达的请求,并为接收的请求创建出对应的HttpContext上下文,后续中间件将在这个上下文中完成各自对请求的处理任务。
在《管道是如何处理HTTP请求的?》中,我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的。...由于依赖注入被广泛应用到了ASP.NET Core的请求处理管道中,对于前面三个对象,会先以服务的形式注册到DI容器中,那么WebHost只需要利用ServiceProvider对象根据对应的服务接口得到这三个对象...四、WebHostBuilder 作为应用宿主的WebHost创建了ASP.NET Core的请求处理管道,而WebHost又是由它的工厂WebHostBuilder创建的。...综上所述,我们已经对ASP.NET Core应用如何利用WebHostBuilder最终构建出请求处理管道的流程以及管道自身处理请求的流程具有了一定的了解,现在我们来做一个简单的总结。...上面所述的所有内容都是针对我们自定义的模拟管道来介绍的,虽然我们对这个模拟管道做了极大的简化,但是它依然体现了ASP.NET Core管道处理请求的真实流程,而且真实管道的创建方式也与模拟管道基本一致。
本次分享会讲解如何让 ASP .NET Core 应用与现代化云基础设施完美融合,提升服务的可检测性,保障线上系统的可用率。...服务可用性检测 服务性能测试 .NET Core 的可检测性支持 日志框架(Logging) 诊断框架(Diagnostics) 健康检查框架(HealthChecks) .NET Core 的日志框架...-- Microsoft.Extensions.Logging .NET Core 的日志框架特性 .NET Core 的日志框架适用场景 用户请求日志 异常日志记录 外部接口的调用日志 复杂组件的调试警告输出....NET Core 的诊断框架特性 事件发布订阅的设计模型 支持任意对象追踪 支持动态开关 支持监听筛选 .NET Core 的诊断框架适用场景 日志组件无法满足需求时 期望对组件内部执行过程跟踪时...期望特定事件发生时,在外部修改组件对象 .NET Core 的诊断框架的应用案例 HttpClient MySql.Data CAP 组件 SkyWalking .NET ASP .NET Core 的健康检查框架
前言# 在 ASP.NET Core 中,微软提供了一套默认的依赖注入实现,该实现对应的包为:Microsoft.Extensions.DependencyInjection,我们可以通过查看其对应的开源仓库看一下它的具体实现...但是稍微有点工作经验的朋友就会发现上述的实现是有很多潜在问题的。...,我们需要引入一个新的集合,这个新的集合是用于存储我们相应的实例对象,在注册的时候我们只记录注册类型,在需要访问到相应的服务时,我们只需要在这个实例集合列表中访问,如果发现我们需要的服务还未被实例化,那我们再进行实例化...对于用哪种数据结构来存,我们可以采用多种数据结构,我这里仍然采用字典来存储,示例代码如下所示: Copy public class ServiceLocator : IServiceLocator {...,但是对于有参构造函数的服务注册,我们定义的 服务提供者就不满足的,因为上述的反射方式是不支持有参构造函数的。
ASP.NET CORE出现之前我们实现的Controller,MVC都继承自Controller基类,WebApi的话继承自ApiController。...现在ASP.NET CORE把MVC跟WebApi合并了,已经不再区分MVC或者WebApi。ASP.NET CORE的Controller继承结构也发生了变化。...POCO Controller 除了继承Controller、ControllerBase之外,ASP.NET CORE框架可以让你的POCO类直接变成Controller。...ASP.NET CORE框架默认会查找后缀为“Controller”的类,并把它当做真正的Controller使用,在路由系统最终匹配Controller的时候它也会被尝试匹配。...这样ASP.NET CORE框架就会忽略它。
IOC描述的是一种设计模式,而DI是一种行为。 2. 使用asp.net core的默认IOC 在之前的ASP.NET 框架中,微软并没有提供默认的IOC支持。...在最新的asp.net core中微软提供了一套IOC支持,该支持在命名空间: Microsoft.Extensions.DependencyInjection 里,在代码中引用即可。...AutoFac 使用 理论上,asp.net core的IOC已经足够好了,但是依旧原谅我的贪婪。如果有二三百个业务类需要我来设置的话,我宁愿不使用IOC。因为那配置起来就是一场极其痛苦的过程。...因为asp.net core 版本3更改了一些逻辑,AutoFac的引用方式发生了改变,现在不介绍之前版本的内容,以3为主。...总结 这一篇简单介绍了如何在Asp.net Core中启用IOC支持,并提供了两种方式,可以说是各有优劣。小伙伴们根据自己需要选择。后续会为大家详细深入AutoFac之类IOC框架的核心秘密。
一、前言 最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持下来了...这两周重新拾起来学习 Vue,文章也在慢慢的更新中,这一篇文章主要是想提前试试水将 ASP.NET Core 部署到 Linux Server 上,原本的打算是把毕业设计就部署到 Linux 上,最终也未能成行...因为目前自己的前后端分离的项目还没开始写,所以这里采用的还是自己原来写的 .NET Core 项目,这篇文章的主要目的是操作下如何将我们 ASP.NET Core 项目部署到我们的 Linux 服务器上...3、发布部署程序 本次部署的项目,采用的还是之前的毕业设计的项目(ASP.NET Core 2.0 MVC 项目实战),在这里发布测试的时候遇到了一个问题,因为当时项目采用的 MySQL 版本为5.7...ASP.NET Core 提供动态内容。
领取专属 10元无门槛券
手把手带您无忧上云