gpt4 book ai didi

c# - ASP.NET MVC 5 : Define route order across controllers (RouteAttribute)

转载 作者:行者123 更新时间:2023-11-30 12:57:59 25 4
gpt4 key购买 nike

RouteAttribute("abc", Order = 2) 顺序似乎只在 Controller 中受到尊重:当在同一 Controller 中定义以下方法时,我得到预期的行为,即 Method1 优先,Method2 永远不会被调用。

[Route("abc", Order = 1)]
public ActionResult Method1() { ... }

[Route("abc", Order = 2)]
public ActionResult Method2() { ... }

如果我在两个单独的 Controller 中定义这些方法,我会得到一个不明确的路由异常:InvalidOperationException: Multiple controller types were found that match the URL.如果多个 Controller 上的属性路由与请求的 URL 匹配,就会发生这种情况。

是否可以使用属性路由定义跨 Controller 的顺序?

编辑 1:似乎即使是在一个 Controller 中具有隐式排序的路由在分布在多个 Controller 上时也是不明确的。以下内容在一个 Controller 中是没问题的(通配符之前的文字),但如果放在不同的 Controller 中则会抛出异常。

[Route("details/abc")]
[Route("details/{product}")]

这让我明白,让 Controller 保持专注并强制在同一个 Controller 中定义相似的路由是有意设计的。

编辑 2:

这些是我实际想要使用的路线。我想将它们放入不同的 Controller 中,因为它们做不同的事情。它们的区别在于前缀。

[Route("reactive/monitor")]
[Route("{tier}/monitor")]

最佳答案

对于第二条路线,您对路线参数没有任何限制。如果您将路由定义为 [Route("{tier:int}/monitor")],您可能不会产生歧义。或者,您可以向路由添加一个正则表达式,使它们独占,例如 {tier:regex(^(?!reactive))?} 可以让您解决这个问题。

关于c# - ASP.NET MVC 5 : Define route order across controllers (RouteAttribute),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com