【问题标题】:C# MVC dynamic controller to one controller [closed]C#MVC动态控制器到一个控制器[关闭]
【发布时间】:2018-05-06 12:43:21
【问题描述】:

我想将所有 api 调用路由到一个控制器。我使用 MVC,我想做的是拥有动态端点,所以基本上你使用的任何 url 都会指向一个执行逻辑的控制器。让它变得更棘手的是我想知道正在调用哪个控制器,例如,如果有一个 Get at:“https://{url}/project/id”,我希望它指向我的“动态" 控制器并将 "project" 作为参数(或可以告诉我使用了哪个端点的东西),所以我知道调用了哪个控制器。

我知道这不是设置 API 的好方法,但目前这似乎最符合我们的需求。

[编辑] 我看到我把我的问题搞砸了,因为我混淆了 MVC 控制器和 ApiController。我最终在这个线程中使用了答案:Route all Web API requests to one controller method

【问题讨论】:

  • 路由框架目前正在为你做这件事。为什么要自定义它?你想做什么。可能有其他解决方案可以解决您的问题。
  • 如果您subclass RouteBase,您可以按字面意思对路线进行编程以做任何您想做的事情。您可以使用RouteData.DataTokens 传递有关当前与应用程序其余部分匹配的路由的任何元数据。
  • @Shyju 问题是我希望能够提供一个 Rest API,但所有业务逻辑都存储在数据库中,即使哪些端点可用也将存储在数据库中并且可以更改,因此我需要其余 api 是动态的,这样我才能捕获 url 并进行正确的数据库调用。 NightOwl888 看起来很有趣且充满活力,可以做我想做的事,请检查一下,谢谢。

标签: c# asp.net-mvc controller routing


【解决方案1】:

在 Asp.Net MVC 中,您可以将例如路由到这样的自定义错误页面

routes.MapRoute("NotFound", 
                "{*url}", 
                new { controller = "Error", action = "PageNotFound" });

所以稍微重命名它看起来像

 routes.MapRoute("AllRequests", 
                 "{*url}", 
                 new { controller = "Dynamic", action = "Dynamic" });

这是你想要的吗?

【讨论】:

  • 这有点像我想要的,但我希望它是这样的:routes.MapRoute("AllRequests", "{controller}/{action}/{ id}”,新的{控制器=“动态”,动作=“索引”}); {controller} 可以是 url 中的任何内容,但始终指向同一个控制器。在我的控制器中,我想知道什么用作 {controller}。
  • 我的提议你没有得到什么?之后,您通过 HttpContext 在 DynamicController 中获取请求(或 URI)。
  • 因为该操作被忽略,所以它总是使用我设置的默认操作(在本例中为索引)。该操作仍应正常工作,因此 /{controller}/Details/5 应触发正确的方法
  • 如果我请求 /controller1/details 会发生什么?与我请求 /controller2/action1 时不一样吗?我想如果你想自己做路由 - 你必须这样做
猜你喜欢
  • 2015-12-28
  • 2021-10-16
  • 1970-01-01
  • 2011-01-14
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
相关资源
最近更新 更多