asp.net mvc core使用Swagger 不能使用多个Get请求问题

2020-03-06 17:19发布

问题:

最近在学习.Net Core
使用Asp.net Mvc Core3.1 创建了一个WebApi项目,在项目中安装了NSwag ,因第一次使用遇到了个问题,就是发现Controller控制器中只能有一个Get请求,想了解一下这种情况如何解决,需要有多个Get请求的Action方法
麻烦了

回答1:

actionname, route 加



回答2:

是那个默认路由规则的问题。控制器里的方法是不能重名的。



回答3:

这是 API 规范,每个 url 表示要访问的资源,http 方法表示要对资源执行的操作,get 查,post 增,put 改,delete 删。动作名一般就是这4个,当然方法名一般也直接用这4个。如果发现你想写多个 get 或者 post 什么的,你应该想的是这两个 get 是不是操作完全相同的资源,如果不是,他们应该在不同的控制器中。
比如 Users 控制器,有个 get 方法,作用是查询用户列表,如果你还想加一个 get 查一个用户,实际上你应该重新写一个控制器叫 User,表示访问单个用户。
也就是说单个对象访问和对象集合访问应该是不同的控制器,哪怕集合访问只有 get。
记住一个原则,一个 api 控制器就是同一个资源4个相关的增删查改动作。哪怕资源长得再像,比如上面的单体和集合,只要不是完全相同的类型,都应该独立控制器,这样你会发现 api 控制器实际上不存在多个 get 这种问题。甚至有些时候相同类型的资源也会有多个控制器,来应对复杂需求。
不要老想着怎么在一个控制器里多加几个 get,换个思路,怎么把这些 get 拆到多个控制器里。不然为什么人家微软不让你这么路由,不是不支持(MVC 可以一个控制器好几个 get 就代表技术完全支持),是这么用就不对。