记录下:
请仔细查阅,微软文档地址 https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
asp.net webApi老系统有个需求。在控制器上执行的action的参数不能为空。
需要像 FromBody 这样,可以自由标注的标签
关于 FromUri与FromBody 参考微软文档
如何在 asp.net 执行 FromBody 或者 FromUri 代码之后再执行我们的 NotNull 判断?
如下图:
通过Resharp反编译可以查看到,通过 action 中的参数类型判断,使用FromUri还是FromBody
FromUri代码
通过 base.GetValueProviderFactories(configuration) 最终获取到 “QueryStringValueProvider”(从请求地址中取值),“RouteDataValueProvider”(从路由中取值) 如下图
FromBody如下图:
根据请求的ContentType然后得到对应的Fromatting从请求负载中取值
实现我的 FromBody 与 FromUri 。 当请求进入asp.net Webapi应用后 先走 FromBody 或 FromUri 代码,执行完后,再执行我的 NotNull 判断,如是null则抛出异常。
具体实现代码,请参考我的仓库 Asp.Net/全局异常捕捉/CatchGlobalException/CatchGlobalException/Controllers/NotNull.cs · zheng_qi/我的仓库 - 码云 - 开源中国 (gitee.com)