在WebAPI v1.0(和ASP.NET MVC4在一起的版本)很多的类和接口并不存在,同时对Task异步编程(ApiController默认提供异步执行方法)的支持还有一些欠缺(缺少不少方便的扩展方法...),在使用时会有一些需要注意的地方,由于一些老的项目用的.NET 4.0的程序集,无法升级和使用一些新的dll,因而部分功能需要自己来考虑,本文旨在将自己遇到的一些困难分享给大家。...过滤请求 过去我们常常将一些验证逻辑和异常处理逻辑放在Controller中,极大的增加了Controller的复杂性,完全可以通过面向切面(AOP)来处理,在.NET 4.0提供的相关基类和接口如下所示...此外,需要注意过滤器的使用范围,包括:全局,在FilterConfig中添加;类级别过滤器,通过添加特性的方式;方法级别过滤器。...通过ITraceWriter来跟踪应用程序,可以很方便的和ETW、Log4net、ELMAH等跟踪服务集成。
,这里我们可能会有一个重复的操作:编写业务逻辑->编写API调用业务逻辑,这种重复性的操作有没有解决办法呢,我们编写完业务逻辑以后便给我们自动生成WebApi,答案当然是有的。...它生成的API符合Restful风格,可以根据符合条件的类来生成WebApi,由MVC框架直接调用逻辑,无性能问题,完美兼容Swagger来构建API说明文档。...1.规则 本组件采用约定大于配置,所以在实际使用中有几个规则: (1)要让类生成动态API需要满足两个条件,一个是该类直接或间接实现 IDynamicWebApi,同时该类本身或者父抽象类或者实现的接口具有特性...(4)会自动添加API路由前缀,默认会为所有API添加 api前缀 (5)默认的HTTP动词为POST,可以通过 HttpGet/HttpPost/HttpDelete等等ASP.NET Core 内置特性来覆盖...(6)可以通过HttpGet/HttpPost/HttpDelete等内置特性来覆盖默认路由 (7)默认会根据你的方法名字来设置HTTP动词,如 CreateApple 或者 Create 生成的API
默认的规则 在ASP.NET MVC4中 global.asax.cs代码中并无注册默认路由规则的代码 代码如下: public class WebApiApplication : System.Web.HttpApplication...一个是针对API请求的路由规则 另一个是针对普通MVC页面请求的路由规则 请求路径以字符串”api”开头的时候将访问webAPI的函数 (注:至于为什么用MapHttpRoute而不是MapRoute...routeTemplate最后面的id匹配Action中的参数, 这与ASP.NET MVC一致 初步的自定义 那么是不是所有的匹配GET请求的Action都必须以“Get”开头呢 不是的 我们可以用方法特性来标记一个方法属于什么什么请求...[HttpPost] [HttpDelete] [HttpPut] 亦可以使用如下这样的方法特性来区分 [AcceptVerbs("GET")] [AcceptVerbs("GET", "HEAD")...] 另外如果你在Controller中写了一个函数 必须是public的,必须以Get开头 而又不想让客户端以请求到此Action 那么可以使用方法特性 [NonAction] 来标记此方法 进一步自定义
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5、单页应用程序SPA等技术和理念很好的结合在一起。...来实现基于IOC的HttpController的激活。...另外一种就是通过HttpClient来进行调用,这和Web Service调用很相似,服务的消费者是一般应用程序。...HttpClient类继承之抽象类HttpMessageInvoker,核心方法SendAsync包括HttpRequestMessage的参数和HttpResponseMessage的返回类型,和之前服务器端的...快速入门系列--WebAPI--01基础 快速入门系列--WebAPI--02进阶 快速入门系列--WebAPI--03框架你值得拥有 快速入门系列--WebAPI--04在老版本MVC4下的调整 注:
在一个web程序中同时包含了MVC和WebAPI,现在需要给WebAPI部分单独添加一个接口验证过滤器IActionFilter,常规做法一般是写好过滤器后给需要的控制器挂上这个标签,高级点的做法是注册一个全局过滤器...MVC增加这么一个没用的Filter,反正我是不能忍,所以寻找有没有更好的办法来实现这个功能。...方法来实现,这个方法提供了当前ControllerModel对象的实例,我们可以在它身上获取到的东西实在太多了,看看它包含些什么: ?...来更改路由规则等等。...基于上面的介绍,我们可以自定义如下的约定: public class ApiControllerAuthorizeConvention : IControllerModelConvention
忽略路由 IgnoreRoute为RouteCollection 的扩展方法,作用是忽略指定样式的路由。...object 一组表达式,限定URL参数值 namespaces string[] 设置一组命名空间 参数解析 1)defaults设置默认的路由值对象, 2)constraints:通过正则表达式来设置约束条件...约定路由中的控制器和操作用controller和action表达。 段也可以包含字面值。...匹配现有文件 通过设置RouteCollection.RouteExistingFiles属性来确定是否可以匹配到现有文件。...注意: 对于1)如果请求的URL能够匹配到网站根目录下的实体文件,那么不会再匹配虚拟路由,除非通过RouteCollection.RouteExistingFiles来设置改变这一行为。
3)、工作中如何快速通过ASP.NET WebAPI构建API接口服务。 4)、阿笨手把手的教会你如何写一手漂亮的WebAPI接口文档。...1.2、本葵花宝典手册课程包含知识点如下: 1)、与Web API的第一次亲密接触,"奇葩"的默认路由配置 2)、 WebApi输出格式有点"丑",选择XML和JSON哪一个格式? ...听说阿笨有解决办法,我去问问题他吧! ASP.NET Web API路由是整个API的入口。我们访问某个资源就是通过路由映射找到对应资源的URL。通过URL来获取资源的。...听说阿笨有解决办法,我去问问题他吧! ASP.NET Web API参数传递把握一个思想,不管多么复杂的参数,都采用扁平化来设计。...刚准备关机睡觉的时候,总感觉心里有事情没解决,顿时坐了起,调用方怎么知道我给的接口数据结果就执行成功和失败了啊。不可能用空字符串来判断吧。听说阿笨有解决办法,我去问问题他吧!
使用 OWIN 作为 ASP.NET Web API 的宿主 ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动 设备)的 HTTP 服务。...Newtonsoft.Json Owin 我们的目的是创建 OWIN 兼容的 Web API 应用, 自然要先添加一个 OWIN 约定的 Startup 类, 来配置我们的 OWIN 应用。...); // 将路由配置附加到 appBuilder appBuilder.UseWebApi(config); } } 按照 Web API 项目的约定, 在项目中添加一个名称为...使用 Katana 服务器运行 在 Katana 下运行 OWIN 应用是很容易的, 新建一个命令行程序项目, 项目名称为: Owin02_WebApi_Katana , 然后向项目中添加下面的 NuGet...也可以通过浏览器来访问 https://localhost:9000/api/values , 得到的结果如下: ?
用过WebApi或Asp.net MVC的都知道微软的路由设计得非常好,十分方便,也十分灵活。虽然个人看来是有的太灵活了,team内的不同开发很容易使用不同的路由方式而显得有点混乱。...不过这不是重点,我在做Node项目的时候就觉得不停的用use(...)来指定路由路径很烦人,所以用Typescript写了这个基于Koa和Koa-router的路由插件,可以简单实现一些类似WebApi...目标是和WebApi一样: 加入的controller会自动加入路由。 也可以通过path()手动指定路由。 可以定义http method, 如GET或POST等。...url的固定前缀就是host和路由之间的,比如localhost/api/v2/user/name,api/v2就是这个固定前缀。...绑定路由到Koa-router上 上面从物理路径得到了路由,但是是以装饰里的参数路径优先,所以先看看刚在存在原型里的Router属性里有没有Path,有的话就用这个作为路由,没有Path就用物理路由。
认证和OWIN。...使用OWIN 自宿主 ASP.NET WebAPI 2可以参考以下2篇文章: Use OWIN to Self-Host ASP.NET Web API 2 Asp.Net Web API 2第十课—...,ASP.NET Web API OWIN Self Hosting 基于约定胜于配置来找到Startup的一个Configuration方法。...UseWebApi 方法通过 ASP.NET Web API 框架 动态的将配置添加到 IAppBuilder。...ASP.NET Web API 仍然使用现有的 HttpConfiguration 类来定义路由等。另外说明下,通过OWIN宿主ASP.NET WebAPI还可以完美的兼容Mono 3哦。
那么今天给大家分享一个我们正在使用的一个基于k8s以及kong网关的WebApi多版本管理的解决方案,这种方案已经在我们的生产环境运行了将近两年,也迭代了很多个版本,我们觉得这个方案非常的适合用在微服务当中...App仍然要让它们能够正常工作,这就需要使用到多个不同版本的Api接口来进行控制,很多时候我们是保留旧接口,增加新接口,为了区分不同的客户端,然后给接口进行版本编号,这就是WebApi的多版本控制管理。...几种版本控制 基于 K8s 和 Kong 的解决方案 由于我们使用的是基于 Kubernetes 的多版本解决方案,所以此处就详细说明一下。...我们采用的是在 URL 中追加版本号来实现的版本控制,这样做有两个好处: 1、方便 kong 进行路由解析,可以直接通过配置方式实现,如果通过 header 来路由的话,需要自己进行扩展才行。...其实办法也是有的,大部分数据中间件都是支持版本划分的,比如 Elasticsearch,CAP 等都支持使用版本来区分数据,对于不支持的可以在程序中进行控制了,比如像 Redis 这种就可以使用不同的逻辑
它是一个功能齐全的框架,通过过滤器、内置模型绑定和验证、约定和基于声明的行为等提供可扩展的管道。对于许多人来说,它是构建现代 HTTP 应用程序的多合一解决方案。...定义路由和处理程序 MVC 在 MVC 中,我们有两种[2]定义路由的方法,一种是通过约定,一种是使用属性。 基于约定的路由更常用于网站而不是 API,并包含在mvc模板中。...; 所述pattern指定路线的不同区段,并且允许指定的默认值。参数可以利用 ASP.NET 的路由约束语法[3]来限制接受的值。 对于 API,建议使用基于属性的路由[4]。...MinimalAPI 要使用 Minimal API 定义路由和处理程序,请使用Map(Get|Post|Put|Delete)方法。...)] public IActionResult Post([FromBody]PaymentRequest request) { } 或者,通过使用[ApiController]属性装饰您的控制器,将应用一个约定来绑定主体中的任何复杂类型
中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化 b) 比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API 分别编写代码...Core WebAPI中,Controller标注 [ApiController] 特性,其路由只能使用[route]特性方式 ASP.NET Core MVC 构建可读性更高的ASP.NET Core...ASP.NET Core 中如何注入同一个接口的多个实现 案例1:使用nlog时,想根据需要使用不同的配置文件Nlog.config 写日志时,就可以使用文章中介绍的 Factory 命名注入方案来实现...创建ASP.NET Core Web API (ControllerBase、参数绑定源) ASP.Net Core WebAPI 几种版本控制对比 使用 Web API 约定 使用 Web API...方式) ASP.NET Core 中 Razor 页面的IPageFilter ASP.NET Core 中 Razor 页面的路由和应用约定 ASP.NET Core Razor 配置:预编译,动态编译
有的企业 Web 服务使用 SOAP 和 WS-*.*它们对许多事务性或复杂的方案来说很不错。...然后还有更轻量级的RESTful web 服务或"Web API",它们使用 JSON,XML,展示了所有的好东西和HTTP 规范的稳定性。...SOAP 允许我们将我们的服务所需的所有知识放在信息本身中",而"您可以使用 [Web API] 来创建只使用标准HTTP 概念 (URI 和动词)的HTTP服务,和创建使用更高级的 HTTP功能的服务...JSON 和 JavaScript真的是动态的,不过通常它是件麻烦事来尝试将真的动态的 JSON 对象反序列化为强类型的.NET结构。...以上内容来自:微小的开心功能第2部分-Visual Studio 2012 中的ASP.NET Web API MVC4 WebAPI(一) MVC4 WebAPI(二)——Web API工作方式 http
早先提及了端点路由app.UseEndpoints, 端点路由强调的是端点和路由,其核心目的是将请求落地点与路由寻址方式解耦。...如今约定路由并不是主流,因为所谓的约定路由对于用户浏览并不友好,而且暴露了后端开发者定义的琐碎的Controller、Action名称。...不对约定路由做任何假设,也就是不使用约定路由,依赖用户的特性路由, 一般用在WebAPI项目中。 ---- 全文梳理就会发现: 官方英文描述屡次出现的route,其实特指的是约定路由。...这样的描述我其实是不苟同的: 路由在.NET里面, 已经被普世认定为“约定路由”和“特性路由”,基于这种认知,我读了好几遍官方英文描述,其实没读出个所以然的。...官方英文描述使用 “route”来特指“约定路由”会误导开发者。
=action_name的方法,如果url没有提供controller和action名称,那么将会命中默认的home控制器中的index方法。...而且实际上不应该让用户的url去匹配Controller和Action名称,应该让开发者去匹配用户想要使用的url,这样就是特性路由。...不对约定路由做任何假设,也就是说不使用约定路由,而是依赖用户的特性路由, 它一般用在WebAPI项目中。 全文梳理就会发现: 官方英文描述屡次出现的route,其实特指的是约定路由。...这样的描述我其实是不苟同的: 路由在.NET里面, 已经被普世认定为“约定路由”和“特性路由”,基于这种认知,我读了好几遍官方英文描述,其实没读出个所以然的。...官方英文描述使用 “route”来特指“约定路由”会误导开发者。
这种形式是没有办法将复杂的 JSON 组织成键值对形式(当然也有方案这点可以参考) ,你传进去可以发送请求,但是服务端收到数据为空, 因为 ajax 没有办法知道怎样处理这个数据。...路由值(Route Values):通过导航到路由如{controller}/{action}/{id}此时将绑定到id参数。...所以通过上述讲述我们知道有多种方式将数据从客户端传递到服务端,然后模型绑定会自动为我们创建正确的方法来绑定到后台参数中,简单和复杂的类型参数都会进行绑定。...3、ASP.NET WebAPI中FromUri和FromBody两类特性区别 1)、【FromUri】特性 应用【FromUri】特性,Web API Action中参数将从URL中解析数据。...查询字符串(QueryStrings):通过查询字符串中的参数来绑定,如name=Jeffcky&id=1,此时name和id将进行绑定,对应WebAPI中媒体 类型格式化器JsonMediaTypeFormatter
之前一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,本篇继续Ingress的使用,来看看如何使用Ingress实现灰度发布(金丝雀发布)。...] 2.1 基于Request Header的流量切分方式 根据Request Header的流量切分方式的约定,适用于灰度发布及A/B测试。...根据基于 Cookie 的流量切分方式的约定,当 Cookie 值设置为 always时,它将被路由到 Canary 入口;当 Cookie 值设置为 never时,请求不会被发送到 Canary 入口... 根据基于服务权重的流量切分方式的约定,适用于蓝绿部署,权重范围 0 - 100 按百分比将请求路由到 Canary Ingress 中指定的服务。...集群: kubectl apply -f ingress-nginx-gray.yaml 快速验证:这里我直接通过浏览器来测试,需要注意的是这里的50%是一个近似分布值,可能实际中不会太精确。
什么是API? 应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。...它们抽象了复杂的代码,并提供一些简单的接口规则直接使用。 为什么要用API?...三,下面来介绍一下精简后App_Start目录的文件吧!!...接下来就是我们的路由大侠了RouteConfig.vb,这里面可以配置MVC路由和API等相关路由 3.3,最后就是我们的主角WebApiConfig.vb配置API相关属性和主路由 四,最后说的就是最常用的部分控制器目录...4.3.1 看下我们的WebAPI路由,我们跟着访问即可!!
,或者经常使用,因为对于其他的分布式技术的问题,在使用的时候会比较的繁琐,但是Asp.Net WebApi可能会简便和快捷很多。...方法和标头访问的系统,ASP.NET Web API需要基于.NET 3.5或更高版本才可以进行开发。...ASP.NET WebAPI使用HTTP方法,而不是URI路径,以此来选择动作。还可以使用MVC样式路由的WebAPI。...,例如“GetContact”或“GetAllContacts”开头的动作。该公约只适用于GET,POST,PUT和DELETE方法。您可以通过使用控制器上的属性启用其他HTTP方法。 ...属性分别用于设置和获取HttpRequestMessage对象和RequestContext对象, ASP.NET Web API除了可以根据HTTP方法来选择操作方法,还可以根据请求的其他元素选择操作方法