哈尔滨网站seo公司农业信息网站建设
news/
2025/9/26 14:06:10/
文章来源:
哈尔滨网站seo公司,农业信息网站建设,莆田城市投资建设集团网站,鹤壁做网站正文ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性#xff0c;今天主角就是 ApiControllerAttribute。0. ApiControllerAttribute 继承自 ControllerAttributeASP.NET Core MVC 已经有了ControllerAttribute#xff0c;这个用来标注一个类型是否是Controller。… 正文ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性今天主角就是 ApiControllerAttribute。0. ApiControllerAttribute 继承自 ControllerAttributeASP.NET Core MVC 已经有了ControllerAttribute这个用来标注一个类型是否是Controller。标注了之后框架就知道哪些是系统里面的Controller了。框架也有其他方法来获取程序里面的Controller所以这个ControllerAttribute不是必须的。ApiControllerAttribute是ControllerAttribute的子类所以框架在处理Controller发现的时候和ControllerAttribute标注的对象是一样的。但是因为ApiControllerAttribute 实现了IApiBehaviorMetadata接口所以提供了一些额外的特这些特性是以HTTP Api为出发点的。下面介绍一下这些特性。1. 自动模型状态验证这个是重点框架会帮你自动验证model的state也就是ModelState.(注:不过我就是因为用FluentValidation的时候模型验证不管用了出问题了才找到这篇文章的).框架会为你自动注册ModelStateInvalidFilter这个会运行在OnActionExecuting事件里面具体来说在action执行之前model绑定之后)。他内部会检查ModelState是否为Valid如果为InValid会直接返回400 BadRequest这样就没有必要执行后面的代码提高效率。它会自动把model state 放到response里面content type 是application/problemjson。当然你也可以自定义因为毕竟你会有自己的验证后文会讲。下面我们先来举个例子说一下。之前的写法现在可以这么写顺道说一下ModelStateInvalidFilter是个公共类所以不用ApiControllerAttribute也可以使用它。2.参数绑定策略的自动推断另一个非常有用的特性是action里面的参数的模型绑定可以自动推断。ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性以便让系统知道如何从Request body里面反序列化他们比如反序列化json。因此写了很多第三方的库来解决这个问题比如WebApiContrib.Core.Formatter.BsonWebApiContrib.Core.Formatter.Csv其他不写了就举个例子现在这些可以自动解决了。除此之外如果一个参数在route里面定义了他会自动从先从path也就是url上尝试绑定不行的话会去从查询参数上绑定。IFormFlie默认从form表单上绑定获取。下面看代码之前3. 处理multipart/form-data请求如果你的action里面的一个参数指定了[FromFile]特性这通常是用于文件上传的),框架会自动假设请求是multipart/form-data。这个是用来解决社区里面提的这个问题。不过这个也是可选的只要你自己定义在action上定义一下[Consumes(...)]。4.其他有两个注意点ApiExplorer 的可见性。 默认所有的controller对ApiExplorer都是可见的所以不影响swagger 等的生成。只是一个基于特性的路由。集中的路由机制不会应用在API controller框架要求只能使用基于特性的路由即在action上指定[Route(XXX)]的方式。5. 行为自定义像MVC框架的大部分组件一样ApiControllerAttribute的行为是高度可自定义的。首先上面说的大部分内容都是可以简单的用 on/off 来切换。具体的设置是在startup方法里面通过ApiBehaviorOptions来实现先来看一下这个类。所有bool类型的属性默认都是false。Suppres有阻止的意思。可以通过以下方法进行设置。来看一下InvalidModelStateResponseFactory属性他是一个返回IActionResult的Func通过他我们可以注入自己的委托来实现需要的返回类型举个例子。原文地址https://www.cnblogs.com/sheldon-lou/p/9495377.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918359.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!