从web api 2迁移到.net 5 web api时出现问题



我正在将一个使用asp.net web api 2构建的中型应用程序迁移到.net 5 web api。问题是,我现在已经重构了控制器,发现查询字符串传递的参数在.net核心中的路由行为不同。

所以我的问题是,为了能够切换到.net 5,我需要保持这些api像今天一样工作,我现在无法更改路由和参数。我有如下示例中的路由,它们返回错误AmbigiousMatchException:请求匹配多个端点:

// GET: api/<ValuesController>
[HttpGet]
public IEnumerable<string> GetAll()
{
return new string[] { "value1", "value2" };
}
// GET: api/<ValuesController>?message=world
[HttpGet]
public string GetMessage([FromQuery] string message)
{
return $"Hello {message}";
}

此控制器可与web api 2配合使用。我看到有一个用于迁移的兼容包,但它在.NET 5(Microsoft.AspNet.Mvc.WebApiComptShim(中被删除了。我甚至尝试过使用它,但在注册使用时出现了运行时错误。

我想知道是否有人经历过并成功解决了这个问题,我已经研究了很多,我发现最多的是一些人在谈论使用IActionConstraint,但我发现的例子是定义强制性参数,这似乎不适合我的问题。

如果有人知道一些可以让我朝着解决方案的方向发展的事情,我将不胜感激

不确定是否可以自动完成,但可以这样做:

private IActionResult GetAll()
{
return new string[] { "value1", "value2" };
}
[HttpGet]
public IActionResult GetMessage([FromQuery] string message)
{
if(message == null)
return GetAll();
return $"Hello {message}";
}

最新更新