ASP.NET WebAPI 中的参数绑定 当 WebAPI 调用 Controller 上的方法时, 必须为其参数赋值, 这个过程就是参数绑定。...本文介绍 WebAPI 如何绑定参数, 以及如何进行自定义。 WebAPI 默认使用下面的规则进行参数绑定: 简单类型, WebAPI 尝试从 URL 中获取它的值。...使用 [FromUri] 要强制 WebAPI 从 URL 读取一个复杂类型的参数, 则需要在该参数上添加 FromUri 标记。...使用 [FromBody] 要强制 WebAPI 从 request正文 (body) 中读取一个简单类型的参数, 需要在该参数上添加 FromBody 标记: public HttpResponseMessage...Post([FromBody] string name) { ... } 在这个例子中, WebAPI 需要使用 media-type formatter 从 request正文 (body) 中读取
随着时间的推移,接口变的越来越多,文档变得也很繁重。而且一份文档经常由多个开发人员维护,很难保证文档的完整性。而且有时写完代码也忘了去更新文档,为了这些小事经常受客户端同事鄙视。...于是带着问题去查找解决方案,在网上一通乱搜后查找出以下两个工具:AspNet.WebApi.HelpPage,Swagger。...常见的有、、 ? 如果响应是一个对象或对象列表,可在当前项目下创建一个ViewModel,并将ViewModel添加到方法头部。...总结 Swagger给我带来的两大好处是:1.以后再也不用写Word文档了,2.增加了写注释的好习惯
ASP.NET Core WebApi 创建项目 使用VS新建项目,选择ASP.NET Core WebAPI即可。...采用RestFull请求方式,对于Controller,需要使用Route特性配置路由;Controller中的Action则通过Http特性进行配置。...[Route("api/[controller]")] public class TodoController : Controller { } 上面代码中的Route配置使用了通配符[controller...由于WebApi没有Web页面,所以需要使用PostMan进行请求。 发布和部署 生成的文件包含程序用到的所有dll和静态资源,发布到制定目录后,在命令行启动程序。...ASP.NET Core使用Kestrel作为Web服务器运行,可以与IIS、Apache、Nginx等反向代理服务器结合使用。
在 ASP.NET Core Web API 中,由于 C# 是一种静态语言(dynamic 在此不表),当我们定义了一个类型用于接收 HTTP Patch 请求参数的时候,在 Action 中无法直接从实例中得知客户端提供了哪些参数...如果不使用 AutoMapper,那么接下来是丑陋的判断: var keys = _httpContextAccessor.HttpContext.Request.Form.Keys; if(keys.Contains...二、将 Keys 保存在 Input Model 中 定义一个名为 PatchInput 的类: public abstract class PatchInput { [BindNever]...bindingContext); if (bindingContext.Model is PatchInput model) { // 将 Form 中的...使用 ModelBinderFractory 创建 ModelBinder 而不是 ModelBinderProvider 以便于未来支持更多的输入格式。 // 3.
在Asp.Net WebApi中添加版本控制,同时在swagger中按版本显示接口 ---- 引用版本控制包 添加版本控制代码 按如下修改App_Start中的WebApiConfig文件 public static void...默认未1.0版本 o.ReportApiVersions = true;//返回版本可使用的版本 o.ApiVersionReader = ApiVersionReader.Combine...,如果没有带版本则默认1.0,请求可以通过query参数或者header方式,名称为api-version,这个名称是在前述代码中配置的 可能遇到的问题 swagger描述中的中文乱码,可以用vs新建一个...SwaggerConfig,把原来SwaggerConfig中的内容拷过去,再删除自动创建的SwaggerConfig文件 启动报错"This XML file does not appear to have
在 ASP.NET WebAPI 中使用 DataAnnotations 验证数据 为了 Web 服务的安全, 通常在服务端也会做数据验证, 不过数据验证的代码确实是有点儿枯燥, 以简单的用户注册来说,...WebAPI 中, 可以使用 DataAnnotations 来简化数据验证, 稍微修改一下上面的 RegisterModel , 为要验证的字段添加验证标记, 代码如下: public class...[Required, Compare("Password")] public string Confirm { get; set; } } 添加了对应的验证标记之后, ASP.NET WebAPI...在参数绑定时会根据验证标记做相应的检查, 并将检查结果放在 ApiController 的 ModelState 属性中, 这样 ApiController 的代码就简化为: [RoutePrefix...除了上面的 Required 和 Compare 标记, DataAnnotations 中关于数据验证的标记如下: CompareAttribute CustomValidationAttribute
当我们开发一款App的时候,App需要跟后台服务进行通信获取或者提交数据。如果我们没有完善的安全机制则很容易被别用心的人伪造请求而篡改数据。 所以我们需要使用某种安全机制来保证请求的合法。...签名算法 签名算法一般都使用Hash散列算法,常用的有MD5,SHA系列算法。这些算法可以根据不同的输入,计算出不同的结果,而且碰撞的概率很低。 签名算法跟加密算法不是一回事。...很多同学都会说使用MD5加密一下,其实这是错误的。签名算法不能恢复原来的数据,因为它本身并不包含原来数据的信息。 而加密方法不同,加密方法是可以根据加密结果重新推算出原来的数据的。...HMAC SHA作为一种更加安全的签名算法,使用一个Key来影响签名的结果。这样同样的输入配合不同的Key可以得出不同的签名,更加安全。...一般我们使用http请求的queryString然后加上时间戳还有随机数来作为签名的参数。
写在前面 是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4开发的授权中心用于对Api资源的保护。...下面我们需要创建两个示例项目: 1、IdentityServer4的授权中心; 2、使用SwaggerUI做自文档的WebApi项目; 写得有点乱,本文源码地址: https://github.com...cnblogs-demos/tree/master/SwggerUI.IdentityServer4.Example 构建基于IdentityServer4授权中心 1、新建空白解决方案,并添加一个空的WebApi...使用SwaggerUI做自文档的WebApi项目 1、添加WebApi项目,SwaggerUIApi 现在项目结构这样: ?...= "v1", Title = "ToDo API", Description = "A simple example ASP.NET
大部分使用Web API的网站都会使用版本化Web API,这是因为当我们升级Web API的时候并不能保证所有的客户端使用的都是最新的Web API,有些旧版本的客户端很有可能使用的某个甚至某几个在新的...Web API 中已经废除的接口。...如果这时我们部署新的Web API的话,旧版本的客户端就无法使用了。因此Web API 的版本化就出来了。下面我们就来一步一步的实现Web API的版本化。...当包成功添加到项目之后,就需要在 Startup的ConfigureServices方法中将ApiVersioning注入到容器中,代码如下: //more code //... using Microsoft.AspNetCore.Mvc.Versioning...p.ReportApiVersions = true; //在请求链接中未设置版本时使用默认版本 p.AssumeDefaultVersionWhenUnspecified
ASP.NET WebAPI使用Swagger生成测试文档 SwaggerUI是一个简单的Restful API测试和文档工具。简单、漂亮、易用(官方demo)。...通过读取JSON配置显示API .项目本身仅仅也只依赖一些html,css,js静态文件.你可以几乎放在任何Web容器上使用 捣鼓了好久最终效果如下 1、API控制器和action描述 2、测试接口...使用swagger 1.创建webapi项目解决方案 2.引用swagger nuget包 swashbuckle和swagger.NET 删除多余的SwaggerUI文件夹和配置类SwaggerNet...GetControllerDesc() } }; _cache.TryAdd(cacheKey, srcDoc); } return srcDoc; } /// /// 从API文档中读取控制器描述
在我们的项目开发中,很多时候需要使用到多系统的数据交互,以及一些功能的分布式开发。...在.NET的体系中的分布式技术主要有webservice,.net remoting,MSMQ,WCF等等,但是今天介绍的是Asp.Net WebApi,对于Asp.Net WebApi技术,估计很多人都不会陌生...,或者经常使用,因为对于其他的分布式技术的问题,在使用的时候会比较的繁琐,但是Asp.Net WebApi可能会简便和快捷很多。...(2).System.AspNet.WebApi:提供在ASP.NET中安装和托管所需的安装的所有软件包的一个引用。 ...ASP.NET WebAPI使用HTTP方法,而不是URI路径,以此来选择动作。还可以使用MVC样式路由的WebAPI。
一.WebApi处理架构: 我们在学习Asp.Net WebApi时,应该对Asp.Net WebApi的内部运行机制有一个大致的了解,很多人说了解这些基本原理的意义不大,实际开发中应用不到而且还浪费时间...(1).在任何Windows进程中自托管。 (2).Web托管,即在IIS之上使用ASP.NET管道进行托管。...(在一个owin兼容的服务器上建立一个webapi层) 在使用web托管时,所使用的是ASP.NET的管道和路由功能,将HTTP请求转发到一个新的ASP.NET处理程序,HttpControllerHandler...这个程序接收到HtppRequest实例转换成HttpRequestMesssage实例,然后推送到WebApi管道,从而在传统的asp.net管道和新的asp.net webapi架构间建立起链接。...五.总结: 本文分为上下两篇,简单的介绍类一下Asp.Net WebApi的一些核心对象,并简单介绍了Asp.Net WebApi路由机制,处理架构,托管方式等等,如有不足和错误之处还望多多指正。
不过可惜了,今天我们讲解的主题不是这几种技术,今天主要讲解的是ASP.NET WebAPI。 ...对于ASP.NET WebAPI的优势和特点,在这里就不讲了,需要用到的自然就会选择,也不需要我浪费篇幅去讲解这些,这篇博文主要讲解ASP.NET WebAPI中的HTTP消息的结构和处理消息的核心对象...(2).由于在.NET4.5中引入了TAP(异步任务模型),所以在新的HTTP模型中,处理HTTP请求的方法可以使用async和awit实现异步编程。...在对于Web项目的开发中,我们对HTTP知识的了解是必要的,对于ASP.NET的HTTP处理的原理在这里就不做具体的介绍,网上也有比较多的文章可供阅读和了解。 ...NET4.5之后的版本中,对象的使用没有客户端和服务器之分,两者可以共用。
WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqestBase...所以这里我们就直接使用(HttpContextBase)Request.Properties[“MS_HttpContext”] public void Post([FromBody]string value
在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击 什么是跨站请求伪造 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack...使用 Asp.Net Core 内置的 Antiforgery Asp.Net Core 应用中内置了 Microsoft.AspNetCore.Antiforgery 包来支持跨站请求伪造。...如果没有, 则可以使用下面的命令来添加这个包: dotnet add package Microsoft.AspNetCore.Antiforgery 添加了这个包之后, 需要先修改 Startup.cs...文件中的 ConfigureServices 方法, 添加下面的配置: public class Startup { public void ConfigureServices(IServiceCollection...文件中添加一个 Api , 来颁发凭据: [Route("api/[controller]")] [ApiController] public class SecurityController : Controller
ASP.NET Core WebAPI接口 在ASP.NET WebAPI中我们也能看到Rest的风格,理想很丰满,显示很骨干。...而且这种方式更符合国外语言表达的方式,不太适合我国宝宝体质。 所以我们在设计接口的时候不用非要用Rest风格,我们可以靠近或者在特定的更适合使用Rest接口系统中使用。...因此我们在实际设计中可能会进行Rest裁剪,我们既使用RPC的返回结果,同时多用准确的状态码,不用什么都返回200。...使用RPC风格,尽量使用合理谓词,不知道使用什么谓词的时候就用POST,Get Delete参数尽量用资源定位URL,业务错误服务端返回合适的状体吗,不知道返回什么就返回400,如果请求处理成功就用200...在上一篇中遗留的这个问题 .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍 所以我们在Controller中Route配置为[Controller]则不管方法接口名称是什么
在前面博文【Vue】Vue 与 ASP.NET Core WebAPI 的集成中,介绍了集成原理:在中间件管道中注册SPA终端中间件,整个注册过程中,终端中间件会调用node,执行npm start命令启动...” 如果上面的属性路由无法匹配,请求就会在中间件管道中传递,至下一个中间件:SPA的终端中间件 以上便是集成原理。接下来我们对其中间件源码进行解读。...,由asp.net core响应 } 2.启动进程-ProcessStartInfo 接下来进入StartVueCliServerAsync的内部,执行node进程,执行npm start命令。..., chunk.Count); } }; } } 2.4 读取输出流至开发服务器启动成功 正常情况下,Vue开发服务器启动成功后,如下图: 所以代码中只需要读取输入流中的...的特性创建Task,并在后续配置内联中间件时使用这个Task app.Use(async (context, next)=>{ }); 使ASP.NET Core的启动与中间件注册顺滑。
如果我们再WebAPI中定义了只有一个string参数的WebAPI函数,如下所示: [HttpPost] public string TrackBill(string str) {...返回值为null 也就是说匹配到了webapi中的post方法,但是该方法根本没有接收到postman中传递过去的key 为str Vaue为123的值。...我们在postman中把key空着,然后value为123,结果webapi中的post函数成功获取到了改值。 不知道微软在这样设计的时候出于什么考虑。 3.第三步。...我们看到,成功收到了str1和str2的值。 5.第五步 其实还有更简单暴力的办法,在路由中通过url中给参数指定值。...我们直接在url中按照路由规则给str1和str2指定了值,并且WebApi中的post函数成功获取到了其值。
1.集成的效果 SPA与ASP.NET Core集成后。根据需求不同,是可以达到两种不同效果。...Vue和后端Webapi的前后端分离项目。...5.1 集成调试 保持上面的配置与代码不变,直接运行ASP.NET Web API Vue将会自动构建,并与ASP.NET Core WebAPI项目将会集成运行,通过访问localhost:port便可以调试访问应用...Core 应用时,它不会启动 Vue dev 服务器, 而是使用手动启动的实例。...文件夹内容到发布文件夹中 这时再通过Visual Studio后者命令发布时,就会同步构建前端项目,发布后端API且包含前端构建后的dist文件。
蛋疼的路由规则约定 在上一篇文章中 我们成功通过AJAX获取到了服务器的数据, 而且服务器根据请求的类型,格式化数据之后再传给客户端。...然而 在上一篇的实例中, 我们为controller程序增加一个GetProducts方法 让这个方法与GetAllProducts方法逻辑一致 public IEnumerable<Product...(小尾鱼也这么认为) 插播一句 VS2012中注释与取消注释的快捷图标改成这样 也是非常蛋疼的改变!还以为是要插入个tip框!...接收POST请求 我们为实例中的controller增加一个方法 public Product PostProduct(Product item) {...我首先想到的是把参数改成string类型的 但string类型的参数并不能接收到任何内容 如下图所示 看来我的想法是错误的 我想总会有办法解决这个问题 就此搁笔
领取专属 10元无门槛券
手把手带您无忧上云