1

我正在尝试使用 NSwag.MSbuild 生成一个招摇规范,但是当我这样做时,它会向我抛出此消息“路径'/api/Account' 上的方法'get'已注册多次”

现在的问题是我的方法路由较少,如下所示,并带有一些控制器示例

        [HttpPost]
        [HttpGet]
        [AllowAnonymous]
        public IActionResult ExternalRegister(string provider, string returnUrl = null)

        [HttpGet]
        public IActionResult AddLogin(string provider, string returnUrl)

        [HttpGet]
        [AllowAnonymous]
        public ActionResult SignUpConfig()

我理解它为什么这样做,但我不明白的是,在 NSwag Studio 中做同样的事情是有效的,我使用的命令$(NSwagExe_Core22) webapi2swagger是否有一个选项,以便它像 Nswag Studio 一样成功生成?

4

5 回答 5

3

在 WebAPI 中,如果您有多个 HttpGet 或 HttpPost 等,则应添加 Route 属性以区分它们。

添加 HttpGet["{name}"]

于 2020-03-03T07:22:15.510 回答
1

事实证明,如果您不想指定路线,则不必指定路线与默认网址模板有关: /DefaultUrlTemplate:"{controller}/{action}/{id?}" 添加 {action} 为我解决了它

于 2020-03-17T11:18:27.133 回答
0

就我而言,我已经为所有路径添加了自定义 [Route("")] 标签。问题是我在控制器中有两个公共辅助方法,NSwag 将其识别为 GET 方法。只需将它们设为私有(无论如何它们都应该是私有的),问题就消失了......

于 2021-02-18T09:06:20.050 回答
0

在这种情况下帮助我的是,像这样设置路由属性: [Route("SignUpConfig")] ,[Route("AdLogin")]

于 2020-03-03T07:17:17.713 回答
0

就我而言,我有

[HttpGet, ActionName("Stuff")]
public async Task<Stuff> GetStuff(long byId, string color)
{
    /* Do things one way */
}

[HttpGet, ActionName("Stuff")]
public async Task<Stuff> GetStuff(string byName, string color)
{
    /* Do things another way */
}

问题是有两个同名的路由接受不同的参数。这是一种 ASP.NET 似乎完全可以应付的过载情况,但显然让 NSwag 大吃一惊。

因为这是在遗留代码中,重命名方法对我来说不是一个选项,所以我创建了一个带有可选参数的方法,如下所示:

[HttpGet, ActionName("Stuff")]
public async Task<Stuff> GetStuff(string color, long? byId = null, string byName = null )
{
    if (byId != null)
    {
        /* Do things one way */
    }
    else
    {
       /* Do things another way */
    }
}
于 2021-06-02T21:37:14.170 回答