宝哥软件园

ASP.NET核心MVC/WebAPI基础系列2

编辑:宝哥软件园 来源:互联网 时间:2021-08-26

前言

我好久没冒泡了。估计快半年没更新博客了。估计是我第一次停这么久。人总是很懒,呆的时间越长越懒。但是,保持惰性是不行的,否则他们会被时间抛弃,被技术淘汰。好了,让我们进入今天的话题,这一节的内容。下面我们来谈谈中的模型绑定系统、模型绑定原理、用户自定义模型绑定、混合绑定和ApiController特性。NET核心。可能有些公园的朋友看过,但是效果不是很好。这篇文章是最详细的解释。建议学过我出版课程的童鞋也读一读。这篇文章有点长。请耐心等待。我只说你会用或学什么。

模型绑定系统

关于模型绑定。NET Core为我们提供了[BindRequired],[BindNever],[FromHeader],[FromQuery],[FromRoute],[FromForm],[FromServices],[FromBody]等功能。[BindRequired]和[BindNever]被翻译为必须绑定,我们称之为行为绑定,而下面的五个From被翻译为它们来自哪里,我们称之为源绑定。我们将在下面详细介绍这两种绑定类型。本节使用版本。NET核心2.2。

行为绑定

[BindRequired]表示必须提供参数的键,但它不关心参数的值是否为空。[BindNever]表示忽略属性的绑定。行为绑定看似很简单,其实不然。在我解释完之后,让我们先看看下面的代码片段。

公共类Customer {[BindNever]public int Id { get;设置;} } [Route('[controller]')]公共类ModelBindController : Controller {[httpset]公共IActionResult Post(客户客户){ if(!ModelState。IsValid){ return BadRequest(model state);}返回Ok();}}在上面,我们定义了一个Customer类,然后通过[bindness]特性来标识类中的id字段,然后我们都通过Postman发送请求

当我们如上发送请求时,响应将返回状态码200成功,id未绑定,这与我们的预期一致,这意味着属性id从未绑定。好的,接下来,我们将[FromBody]标志添加到控制器上的Post方法参数中,代码片段如下:

公共IActionResult Post([from body]Customer Customer){ if(!ModelState。IsValid){ return BadRequest(model state);}返回Ok();}

这就是为什么在我们通过了[FromBody]属性标识之后,属性id也加上了[BindNever]属性(代码同上,但不重复),结果id被绑定,说明[BindNever]属性对于[FromBody]属性标识的参数无效。真的是这样吗?接下来,我们尝试将[BindNever]绑定到对象,如下所示:

公共类Customer { public int Id { get设置;} } [Route('[controller]')]公共类ModelBindController : Controller {[httpset]公共IActionResult Post([bindness][from body]客户客户){ if(!ModelState。IsValid){ return BadRequest(model state);}返回Ok();}}如上所述,我们将[bindness]绑定到对象Customer,但是[bindness]和[FromBody]没有顺序,也就是说我们也可以将[FromBody]放在[bindness]之后。接下来,我们使用Postman再次发送以下请求。

此时,我们可以清楚地看到,我们发送的请求包含id字段,当我们将[BindNever]绑定到对象时,最终的id

更多资讯
游戏推荐
更多+