NetCore中自动为WebApi根据Action方法自动添加对应的请求方式

4 篇文章 0 订阅

NetCore中WebApi自动根据Action谓词自动添加请求方式,无需再写手动添加HttpMethod特性,RouteAttribute特性,ActionName特性隐藏实际Action名称。这里你只需要简单的引用即可。完全兼容原始WebApi,且路由生成方式跟原始路由Api一样。

NetCore中指明一个类是控制器有以下三种方式:
1.以Controller结尾的类
2.继承了ControllerBase的类
3.使用ApiController特性并结合RouteAttribute特性的类

以上这三种情况,只要不标注NonController特性都是Controller

这里主要通过实现IApplicationModelConvention接口,应用模型转换器,实现根据Action方法符合驼峰模式取第一个单词来判断并加入请求方式。
这里你只需要添加简单的一句话即可:

services.AddMvcCore(option =>
            {
				//动态api模型转换可以设置一些静态值
				//DefaultHttpMethod 默认的Http请求方式当不能通过谓词推断出来时,默认值为post
				//DefaultControllerRouteAttributeTemplate 默认在Controller上添加的RouteAttribute的Template 默认值为:"api/[controller]/[action]"
				//HttpVerbs 请求谓词是一个kv 默认提供了一些请求谓词对应的请求方式 你可以自动添加
				//ApplicationModel 暴露出来用于Action生成功能点
				
                //动态Api转换
                option.Conventions.Add(new DynamicApiControllerApplicationModelConvention());

            })

添加这句话之后你可以直接写一个Controller类就可以完成动态Api的生成

public class DyApiController
    {
       
        private readonly IOptions<MvcOptions> _options;

        public async Task DeleteDynamicApi(int i)
        {
            await Task.CompletedTask;
        }

        [NonAction]
        public async Task PutDynamicApi(int i)
        {
            await Task.CompletedTask;
        }

        [ActionName("testDy3")]
        public void TestDynamicApi3()
        {

        }

        [Route("/hiroute")]//存在/开头前缀无效
        public void TestDynamicApi() 
        { 
        
        }

        //[Route("")]
        [HttpGet]
        public void TestDynamicApi2()
        { 
        
        }


        [ActionName("testDy4")]//如果存在ActionName ActionName将替换TestDynamicApi4的名称
        //[Route("hi")]
        [HttpPost("/a")]
        [HttpGet("a/b/{i}")]
        [AllowAnonymous]
        public void TestDynamicApi4(int i)
        {

        }

        [Route("")]//route为空 默认使用 apiPrefix/controllerName/actionName/{Route或HttpMethod特性中非/开头的template}
        public void DeleteDynamicApi5(int i)
        {

        }

        [ActionName("da6")]
        public async Task InsertDynamicApi6Async(int i)
        {
            await Task.CompletedTask;
        }

        [ActionName("sd")]
        public async Task SelectDynamicApi6Async(int i)
        {
            await Task.CompletedTask;
        }
    }

然后运行程序我们可以看到结果如下:
在这里插入图片描述

如果你觉得还可以通过NuGet包下载OpenDeepSpace.DynamicApi尝试吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值