【问题标题】:Routing override路由覆盖
【发布时间】:2018-08-07 18:37:39
【问题描述】:

如果控制器中存在某些操作,我正在寻找一种方法来覆盖操作调用。

想象一下:

[Route("api/[controller]")]
public partial class UsersController : BaseController {
    [HttpGet("Friends/{id}")]
    public IActionResult GetFriends(int id) {
    // some code
    }

然后我在另一个文件中:

[Route("api/[controller]")]
    public partial class UsersController : BaseController {
        [HttpGet("Friends_custom/{id}")]
        public IActionResult GetFriends_custom(int id) {
        // some code
        }

我希望我的前端只调用

/users/friends

如果存在 _custom,我如何获得与 _custom 匹配的 asp 路由?

【问题讨论】:

  • 没有办法做到这一点。使用适当的对象继承和覆盖。
  • 您是如何决定何时将/users/friends 转到GetFriendsGetFriends_custom?你会将所有/users/friends 路由到GetFriends_custom 吗?如果是这样,请尝试URL rewrite
  • 它是一个具有多个(版本/客户端)的应用程序,每个版本都继承基本版本(主分支),因此例如客户端 1 可能使用与基本版本相同的 GetFirend,但客户端 2 将使用 GetFirend_Custom。因此,在客户端 2 分支中,我们有具有 GetFriend_Custom 的部分类。 @ChrisPratt,在这种情况下,覆盖将不起作用。
  • 这是我听过的最令人费解的事情。源代码管理没有继承的概念。如果您的代码的多个版本都基于 master 存放在不同的分支中,那么这意味着您必须实际将 master 合并到每个分支中或重新设置每个分支。无论哪种方式,都可能出现任何数量的问题,然后您需要为每个客户端分支使用单独的集成管道,以确保对 master 的一次更改不会破坏任何特定客户端分支中的某些内容。想想就头疼。
  • 您可以轻松通过配置来处理这个问题,并在一个客户需要不同的东西时分支代码。然后,您只需处理一个代码库,并且不需要像部分类这样愚蠢的功能来存根。

标签: c# asp.net-core asp.net-core-routing


【解决方案1】:

经过漫长的一天,我发现我们可以在 RouteAttribute 中使用Order。它完全符合我的需要!

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2014-05-28
    • 2016-07-12
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多