首页 新闻 会员 周边

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

0
悬赏园豆:5 [已解决问题] 解决于 2020-03-06 18:23

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

释通明的主页 释通明 | 初学一级 | 园豆:160
提问于:2020-02-28 17:28
< >
分享
最佳答案
0

actionname, route 加

收获园豆:3
czd890 | 专家六级 |园豆:14412 | 2020-02-28 22:24

刚看到,不好意思,因是新手没太明白你的意思,方便细说下吗?麻烦了
注:我这边方法名都是不一样的,比如说aaa、和bbb2个方法名,都是[HttpGet]属性的

释通明 | 园豆:160 (初学一级) | 2020-03-02 14:57

@释通明:
如果是Api项目,必须要标明Route,因为他的route规则类似是:“{httpMethod} {controller}/{id?}”
[HttpGet("Get1")] //==> " Get {controller/get1}"
public void Action1(){}
[HttpGet("Get2")] //==> " Get {controller/get2}"
public void Action1(){}
[HttpPost("Get3")] //==> " Post {controller/get3}"
public void Action3(){}
Api项目里面controller里面不带http[post,put,等]的一个public action方法默认解析为httpget方法。

czd890 | 园豆:14412 (专家六级) | 2020-03-02 17:11

@czd890: 明白了,谢谢了

释通明 | 园豆:160 (初学一级) | 2020-03-06 14:26
其他回答(2)
0

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

收获园豆:1
数据酷软件 | 园豆:130 (初学一级) | 2020-02-29 08:20
0

这是 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 就代表技术完全支持),是这么用就不对。

收获园豆:1
coredx | 园豆:678 (小虾三级) | 2020-03-06 00:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册