Asp.net core mvc 在.NET核心MVC上创建不明确的路由

Asp.net core mvc 在.NET核心MVC上创建不明确的路由,asp.net-core-mvc,Asp.net Core Mvc,我曾经有一个NetWebAPI(4.6.2)应用程序,它有一些不明确的路由。大概是这样的: [RoutePrefix(RoutePrefix)] public class TestController : ApiController { public const string RoutePrefix = "test"; [HttpGet, Route("")] public IHttpActionResult GetAll(Guid uid, [FromUri]int limit, [From

我曾经有一个NetWebAPI(4.6.2)应用程序,它有一些不明确的路由。大概是这样的:

[RoutePrefix(RoutePrefix)]
public class TestController : ApiController
{
public const string RoutePrefix = "test";

[HttpGet, Route("")]
public IHttpActionResult GetAll(Guid uid, [FromUri]int limit, [FromUri]int offset)
{
  // Logic Here.
}

[HttpGet, Route]
public async Task<IHttpActionResult> Test([FromUri]Guid id, [FromUri]int? limit = null, [FromUri]int? offset = null)
{
  // Logic Here.
}
}
问题是我正在将此API转换为NET Core MVC API,而MapHttpAttribute路由设置不再可用。这意味着现在我在一些行为上有一些模糊的问题(比如上面提到的)

我知道有一种方法(我希望在将来这样做)就是为每一个行动制定一条特定的路线。在这一点上,基于此API的使用情况,我无法更改所有路由。有了这些,我想知道是否有人找到了一种在不改变路线的情况下处理这种情况的方法


谢谢大家。

据我所知,ASP.NET核心不支持模糊路由,甚至Web Api的更高版本也不支持模糊路由。在ASP.NET核心,具体来说,路由短路,所以它将总是采取第一个可行的匹配,从来没有考虑任何其他事情。您唯一的选择是为每个操作分配唯一的路由,或者将两个操作的逻辑组合为一个操作

也就是说,为什么你在这里有两个不同的动作,这是没有道理的。两者之间没有功能上的区别,除了第一个将填充参数中的默认值,而第二个将填充空值。默认情况下,所有操作参数都是可选的。如果请求中没有任何内容需要填写,模型绑定器将自动将default/null绑定到每个参数。如果希望最后两个参数可以为null,那么只需使用该签名,然后就可以在操作中根据它们是否具有值进行分支

config.MapHttpAttributeRoutes();