【问题标题】:Create Ambiguous Route on .NET Core MVC在 .NET Core MVC 上创建模糊路由
【发布时间】:2019-03-27 02:35:13
【问题描述】:

我曾经有一个 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】:

    据我所知,ASP.NET Core 不支持模糊路由,甚至 Web Api 的更高版本实际上也不支持。在 ASP.NET Core 中,特别是路由短路,所以它总是会选择第一个可行的匹配项,而不会考虑其他任何事情。您唯一的选择是为每个动作分配唯一的路线,或者将两个动作的逻辑组合成一个动作。

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

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2019-01-02
      • 2022-09-27
      • 2020-06-29
      • 2020-04-17
      相关资源
      最近更新 更多