c# - asp.net 核心路由值到基本 Controller 并可选择覆盖操作

标签 c# asp.net-mvc asp.net-core

我有一个基本 Controller ,我的大部分 API 逻辑都位于其中。我想标准化 api 动词,我希望这个基本 Controller 默认处理大多数请求,除非我继承自这个 Controller 并覆盖特定操作。

给定这样的路径:“/api/Socks/Get?apiKey=1”我可以这样做:

[Route("api/[controller]/[action]")]
public class RestDbApiController : Controller
{
    [HttpGet]
    public virtual async Task<JsonResult> Get(string apiKey = null) {

.....

public class SockController : RestDbApiController
{}

这工作正常 - 即。该请求被路由到基本 Controller 上的操作。问题是我必须声明 SockController,否则请求将不会路由。

我希望能够将所有对“/api/xxxxx”的请求路由到基本 Controller ,而无需声明任何其他 Controller 。如果有任何方法可以做到这一点,请告诉我。

我为什么要这样做? 我正在尝试制作一个带有外部脚本定义的通用 Controller 。根据 Controller 名称,它将从类似命名的脚本文件中读取脚本。我希望能够将脚本文件添加到目录中并让它像那样工作,而无需在代码中进行任何声明

最佳答案

这实际上是不可能的。从技术上讲,您可以将通配符路由绑定(bind)到 Controller ,但这会吞噬所有内容。换句话说,你所有的 API 路由都将永远命中这个基础 Controller ,然后你必须在该基础 Controller 内基本上设置你自己的路由基础设施,以将请求重新路由到正确的 Controller 。如果它不明显,那将是一个非常糟糕的主意。

最好的做法实际上是您不想做的事情:实际定义派生 Controller 。虽然您可能会认为它是无关紧要的,但实际上根本不是。它用于使您的代码 self 记录。很明显,这是一个处理“ socks ”的 Controller ,但它自己没有任何特定的逻辑。没关系。

关于c# - asp.net 核心路由值到基本 Controller 并可选择覆盖操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328251/

相关文章:

C# 从 Guid 结合 40Char 十六进制字符串 (UUID) 创建一个 Auth Token

angular - 尝试从 Angular 应用程序连接到 asp.net core signalr hub 时出错

c# - .Net 核心起订量 : An expression tree may not contain a call or invocation that uses optional arguments

c# - 将 System.Drawing.Bitmap 转换为 stdole.StdPicture

c# - 如何从 C# 字典创建 JSON(类似于 PHP)

c# - RavenDB session > 30

c# - NativeWindow的AssignHandle没有父窗体

javascript - 是否有任何使用工具提示显示验证消息的客户端验证库?

asp.net-mvc - Asp.Net MVC 2 Html.TextBoxFor 为模型的 DateTime 属性指定格式字符串的最佳方法

c# - .Net Core 2.1.2 版本设置和 Controller 脚手架(序列不包含任何元素)