在.NET Core MVC上创建不明确的路由

问题描述 投票:0回答:1

我曾经有一个NET Web API(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.
}
}

所有这一切都在过去,因为我在启动时有这个设置:

config.MapHttpAttributeRoutes();

问题是我正在将此API转换为.NET Core MVC API,并且MapHttpAttributeRoutes设置不再可用。这意味着现在我对某些操作(如上面提到的那些)有一些含糊不清的问题。

我知道一种解决方法(我希望将来能做到这一点)就是为每一个动作制定一条特定的路线。此时,根据此API的用法,我无法更改所有路由。有了这一切,我想知道是否有人找到办法处理这种情况而不改变路线?

感谢你们。

asp.net-core-mvc
1个回答
1
投票

ASP.NET Core不支持不明确的路由,据我所知,实际上甚至不支持Web Api的更高版本。在ASP.NET Core中,特别是路由短路,因此它总是需要第一次可行的匹配,从不考虑其他任何事情。您唯一的选择是为每个操作分配唯一的路由,或者将两个操作的逻辑组合成一个操作。

也就是说,为什么你首先在这里有两个不同的动作是没有意义的。两者之间没有功能差异,除了第一个将填充参数中的默认值,而第二个将填充空值。默认情况下,所有操作参数都是可选的。模型绑定器会自动将默认/ null绑定到每个参数,如果请求中没有任何内容可以填充。如果您希望最后两个参数可以为空,那么只需使用该签名,然后您可以在操作中分支是否或不是他们有价值。

© www.soinside.com 2019 - 2024. All rights reserved.