核心 API 控制器捕获所有未知路线

2024-02-16

我有一个 Core 2.2 API 和一堆现有的控制器。我现在想做的是添加一个新的控制器,其行为类似于包罗万象的路线,但仅适用于该控制器(并且不干扰现有控制器的路线).

在我现有的控制器中,我将路由定义为控制器属性

[Route("api/[controller]")]
[ApiController]
public class SandboxController : ControllerBase
{
    [HttpGet("Hello")]
    public IEnumerable<string> Hello()
    {
        return new string[] { "Hello World", TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")).ToString()};
    }
}

对于这个新的“包罗万象”的控制器我需要它能够捕获路由到它的任何 Get、Post、Put、Delete。例如这个控制器路由是../API/包罗万象。如果有人在 ../api/catchall/ 发帖一些/随机/未知/路线我试图抓住这个并将其路由到../api/catchall/post.

到目前为止我完全不成功。这是我到目前为止得到的:

在我的 Startup.cs 中

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseAuthentication();

...

    app.UseMvc(routes =>
    {
        routes.MapRoute("default", "{controller=Sandbox}/{action=Hello}/{id?}");

        routes.MapRoute(
            name: "catchall",
            template: "{controller}/{*.}", 
            defaults: new { controller = "catchall", action = "post" });
    });

还有包罗万象的控制器:

[Route("api/[controller]")]
[ApiController]
public class CatchallController : ControllerBase
{
    [HttpPost("post", Order = int.MaxValue)]
    public IActionResult Post([FromBody] string value)
    {
        return Content("{ \"name\":\"John Doe\", \"age\":31, \"city\":\"New York\" }", "application/json");
    }
}

关于如何让它发挥作用有什么想法吗?


捕捉所有路线 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.2#route-template-reference指定与* or **句法。地方[Route("{**catchall}")]关于您想要成为包罗万象的行动的行动。这将为以控制器路由属性中指定的前缀为前缀的所有路由创建捕获所有路由。

[Route("api/[controller]")]
[ApiController]
public class CatchallController : ControllerBase
{
    [Route("{**catchAll}")]
    [HttpPost("post", Order = int.MaxValue)]
    public IActionResult Post([FromBody] string value, string catchAll)
    {
        return Content("{ \"name\":\"John Doe\", \"age\":31, \"city\":\"New York\" }", "application/json");
    }
}

在上面的例子中,这会捕获api/catchall/anything/following/it并将字符串 catchAll 设置为anything/following/it

如果你想设置一个站点范围的捕获所有路由,你可以使用绝对 url

[Route("/{**catchAll}")]
public IActionResult CatchAll(string catchAll)
{

}

这将捕获与任何其他指定路由不匹配的任何路由。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

核心 API 控制器捕获所有未知路线 的相关文章

随机推荐

  • 使用 Sentiwordnet 3.0

    我计划使用 Sentiwordnet 3 0 进行情感分类 有人可以澄清一下 Sentiwordnet 中与单词相关的数字代表什么吗 例如排名 5 中的 5 是什么意思 另外对于 POS 来说 用来表示副词的字母是什么 我假设 a 是形容词
  • 数组 - foreach 带来 ->致命错误:无法使用类型的对象

    所以 我对这个数组很生气 第二天让我感到痛苦 我正在开发一个 OOP PHP 脚本 我得到一个数组 Array 0 gt Project Object project id gt 1 title gt Some Name date gt 2
  • 具有动态字段的 Angular Reactive Form

    我目前正在与 Angular 形式数组作斗争 我有一个动态添加字段的表单 我已经创建了表单对象 this otherDataForm this fb group 我添加了这样的动态字段 addField field CustomFormFi
  • 在C#中通过串口发送ctrl+C?

    How can I send my device ctrl c through serial port in C 串行端口不传输密钥 它们传输字节 通常是 字符的 ASCII 表示形式 Keys ControlKey Keys C 与感知
  • 在 Mongoid 中使用 AND 和 OR 的组合

    我想构造一个以下形式的查询 select from some table where field1 x or field2 y and field3 z or field4 w 通过阅读文档 我认为它应该看起来像这样Mongoid Some
  • Delphi:如何响应WM_SettingChange/WM_WinIniChange?

    我需要知道我的申请何时收到WM SETTINGCHANGE http msdn microsoft com en us library ms725497 v VS 85 aspx消息 以前称为WM WININICHANGE http msd
  • 怎么躲得过感叹号啊!在cmd脚本中?

    当我有setlocal ENABLEDELAYEDEXPANSION在cmd脚本中设置有什么方法可以逃脱 我想用作命令的参数 echo off setlocal ENABLEDELAYEDEXPANSION echo I want to g
  • R studio 4.0 上的 easi 包

    easi 包 精确仿射石索引模型 有点旧 但对我的目的仍然有用 考虑到它是基于 R 2 15 3 构建的 有人设法将它安装在 Rstudio 4 上吗 谢谢 我分叉了 github 存储库并更新了源代码以修复Error in class f
  • Excel VBA 自动筛选添加空行

    我修改了 Excel 宏 之前它是逐行进行的 现在它会批量过滤结果和复制 效率更高 我现在遇到的问题是 自动过滤器向工作表中添加了数百万个空行 但我无法确定为什么会这样做 CountryCodes 是一个字典 其中包含过滤器的值 Crite
  • iOS 多个 AVPlayer 对象导致音频/视频同步丢失

    我一直在尝试使用两种不同的AVQueuePlayer我的应用程序中的对象 第一个播放器播放一系列通过网络传输的短视频剪辑 第二个对象仅播放一个视频 但长度要长得多 它也是流式传输的 我已验证所有剪辑都具有正确的音频 视频同步 我注意到的是
  • 从缓存的选择器遍历 DOM 是否比在 DOM 中查找 ID 元素更快?

    关于通过 class 或 id 或其他选择器查找元素是否更快存在很多问题 我对此不感兴趣 我想知道你是否有 var link this let s say you re in a click handler 通过这样做找到容器是否更快 va
  • 等待元素中的文本发生更改

    请建议 Selenium 是否有一个好的选项可以等待元素内的文本发生更改 状况 页面不会自动重新加载 我需要的文本元素会动态重新加载 该数据更新所需时间未知 预期文本未知 它是一个时间戳 我编写了一个方法 每 1 秒 或我设置的任何时间 检
  • 当 localStorage 已满时会发生什么?

    我已经发现articles http code google com speed page speed docs caching html关于缓存行为 所以我只能假设它没有太大不同 但我想确定一下 我读到大多数浏览器都有 5MB 给予或接受
  • 我应该如何正确实现 Clojure 核心接口?

    如果我使用 Clojure 实现一些数据结构deftype 我应该如何决定哪一个Clojure 核心接口 https github com clojure clojure tree master src jvm clojure lang实施
  • 在 Android 上使用 LuaJ 从 Lua 脚本中请求其他 lua 脚本

    我在 Android 上通过 LuaJ 从 Java 调用需要其他 Lua 脚本的 Lua 脚本时遇到问题 我认为这与我当前的工作目录有关 我在 Java 中尝试的 InputStream input EvilApp getContext
  • Spring通过构造函数参数表达不满足的依赖关系,索引类型为0

    完整的消息是 Caused by org springframework beans factory UnsatisfiedDependencyException Error creating bean with name userRepo
  • Javascript 中日期范围内有多少个特定天

    我有两个约会 一个是开始日期 另一个是结束日期 我想计算有多少个星期六 星期一和星期三属于该日期范围 我该如何解决 我看过几个教程 但他们只计算日期范围内的日期 提前致谢 我使用以下代码仅计算工作日 但我只需要有多少个星期六 星期一和星期三
  • JBuilder 模板永远不会被调用

    在我的 Rails 4 应用程序中 我有一个API V1 ClustersController结构如下 class Api V1 ClustersController lt ApplicationController respond to
  • SELECT 语句的 SQL 别名

    我想做类似的事情 SELECT FROM AS my select WHERE id IN SELECT MAX id FROM my select GROUP BY name 是否可以以某种方式执行 AS my select 部分 即为
  • 核心 API 控制器捕获所有未知路线

    我有一个 Core 2 2 API 和一堆现有的控制器 我现在想做的是添加一个新的控制器 其行为类似于包罗万象的路线 但仅适用于该控制器 并且不干扰现有控制器的路线 在我现有的控制器中 我将路由定义为控制器属性 Route api cont