在使用 MapWhen 进行分支时注册中间件,以便仅针对一组端点运行它

2023-12-20

我需要为所有端点运行两个中间件,但 /accounts/* 下的端点除外。

我在配置服务中使用它:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddControllers();
}

配置方法如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IUserService  userService)
{
    app.UseCors(builder => builder
        //.AllowAnyOrigin()
        .SetIsOriginAllowed((host) => true)
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());

    app.UseRouting();

    app.UseAuthentication();

    //THIS IS WHAT I JUST ADDED TO SUPPORT THE BRANCHING OF ROUTES
    app.MapWhen(context =>
    {
        return !context.Request.Path.StartsWithSegments("/accounts");
    }, appBuilder =>
    {
        appBuilder.UseMiddleware<TenantProviderMiddleware>();
        appBuilder.UseMiddleware<UserClaimsBuilderMiddleware>();
    });

    //app.UseMiddleware<TenantProviderMiddleware>();
    //app.UseMiddleware<UserClaimsBuilderMiddleware>();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<VehicleHub>("/vehicle-hub");
        endpoints.MapControllers();
    });

 }

但我收到以下错误:

System.InvalidOperationException:请求到达管道末尾,但未执行端点:“WebAPI.Controllers.VehiclesController.Get (WebApi)”。如果使用路由,请使用“IApplicationBuilder.UseEndpoints(...)”注册 EndpointMiddleware。

从错误中我了解到我应该在 MapWhen 方法中使用 UseEndpoints 而不是 UseMiddleware,但无法正确执行。

那我应该如何注册中间件呢?


看起来你需要UseWhen https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.usewhenextensions.usewhen?view=aspnetcore-3.1,其中,根据docs https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1#branch-the-middleware-pipeline:

...根据给定谓词的结果分支请求管道。不同于与MapWhen,如果该分支没有短路或包含终端中间件,则它会重新加入主管道

因为你正在使用MapWhen, both UseAuthorization and UseEndpoints对你没有影响/accounts/路径。您显示的错误是因为 Endpoints 中间件在这种情况下不运行。

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

在使用 MapWhen 进行分支时注册中间件,以便仅针对一组端点运行它 的相关文章

  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 重载<<的返回值

    include
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 如何将网站上的文件保存到SD卡

    有谁知道如何通过wifi将文件从网络服务器 本地主机 保存到SD卡 我正在对我的应用程序进行 xml 解析 为此我必须从 localhost 下载 xml 文件到 sdcard 然后标记解析 我一直在将 xml 文件下载到 SD 卡上 请指
  • 使用 xor reg, reg 是否比 mov reg, 0 有优势? [复制]

    这个问题在这里已经有答案了 在 x86 上有两种众所周知的方法将整数寄存器设置为零值 Either mov reg 0 or xor reg reg 有人认为第二种变体更好 因为值 0 没有存储在代码中 并且可以节省生成的机器代码的几个字节
  • mysql中行到列的转换

    下面是我的表结构 我想将其转换为另一种格式 从行到列类型 我已经尝试了很多 但我无法这样做 StudentID Mark Subject 10 46 Java 10 65 C 10 79 JavaScript 11 66 Java 11 8
  • PostgreSQL 中的 JSON 外键

    是否可以将外键分配给 PostgreSQL 中的 json 属性 这是我想要实现的示例 但它不起作用 CREATE TABLE Users Id int NOT NULL PRIMARY KEY CREATE TABLE Data Id i
  • %运行另一个笔记本时 Jupyter 中出现编码错误

    我在 Jupyter 笔记本中使用西里尔字母符号 在 NoteBook 1 中 我运行 NoteBook 2 run NB2 ipynb 在 NoteBook 2 中 我写入了一些 txt 文件 TestText open C TRASH
  • Dart 中的动态和对象有什么区别?

    它们看起来都可以在相同的情况下使用 类型检查等方面是否有不同的表示或不同的微妙之处 编辑以更新空安全 使用Object 代替Object 另一种观点dynamic它并不是真正的类型 它是一种关闭类型检查并告诉静态类型系统 相信我 我知道我在
  • Django 如何在更新用户时发送 post_save 信号?

    阅读文档后 https docs djangoproject com en dev topics signals https docs djangoproject com en dev topics signals 我在我的 signal
  • 为什么我在序言中找不到斑马谜题的答案?

    这是我目前的代码 我正在尝试解决斑马拼图 http en wikipedia org wiki Zebra Puzzle exists A A exists A A exists A A exists A A exists A A righ
  • bash: ./helloworld_s: 没有这样的文件或目录。文件明明就在那里

    我对 bash 并不陌生 但这是我第一次看到这种情况发生 OP localhost linking ls helloworld lib o helloworld lib s helloworld s OP localhost linking
  • 如果操作栏/工具栏为白色,菜单项上不会出现波纹

    我有白色工具栏 其中菜单项显示为操作 该操作是来自材质图标的黑色矢量资源 单击菜单项时没有波纹效果 因为波纹效果也是白色的 如果工具栏背景更改为其他颜色 例如蓝色 则会出现波纹 如何更改菜单项波纹颜色 使其在白色背景上可见 我试图改变颜色控
  • 在 JavaScript 中创建 XML

    是否可以使用 JavaScript 中的一些数据创建 XML 文件 我将数据存储在变量中 我用谷歌搜索了一下 似乎没有讨论太多 我以为我可以用XMLWriter比如这样 var XML new XMLWriter XML BeginNode
  • 从 cfc 返回多个存储过程结果集

    我正在尝试将应用程序中的某些页面转换为使用 cfc 其中一个页面使用存储过程来检索几组数据 现在 当我访问结果时 它们的行为就像我使用了
  • C 或 C++ 中的边界检查开销大吗?

    绑定检查很昂贵 gt x2 倍运行时开销 以上这一点是我从我的一位教授那里得到的 我对此很困惑 据我所知 程序中最耗时的部分是IO 来自网络和硬盘 但是 C 或 C 中的边界检查并不总是与这两个输入源相关 例如 我在 C 中使用以下命令将一
  • 如何检测代码正在 eclipse IDE 中运行

    如何检测代码正在 eclipse IDE 中运行 我不知道获取此类信息的通用方法 一个建议 当您在 Tomcat 中启动 Java 程序 或 Web 服务器 时 只需添加一个参数来指示该程序是由 Eclipse 启动的 您可以通过打开 打开
  • 在mongodb中使用findOne获取具有最大id的元素

    我正在尝试从 mongo 集合中检索一个元素 即具有最大 id 字段的元素 我知道这可以通过查询来完成 db collection find sort id 1 limit 1 但这看起来有点不优雅 我想知道是否有办法使用 findOne
  • 如何生成 OpenOffice Draw 文档?

    我想在 OpenOffice Draw 中创建流程图 由于有很多步骤要显示 并且将来可能会更改 但我可以提取数据 因此我想通过以下步骤自动创建 使用指定的页面设置创建新的 ODG 文档 插入具有指定属性的流程图形状 用箭头连接这些东西 理想
  • Windows 服务器上的自托管远程 git 存储库

    我们的本地网络上有一台计算机 被指定为 服务器 运行 Windows XP 我们在其中保存共享文件夹和所有人都应该可见的内容 如何在其上创建远程 Git 存储库 并对其进行设置 以便本地网络上不同计算机上的不同人可以拉 推 我不在乎使用哪种
  • wince 6.0 c# 中的全屏应用程序

    我有我的应用程序 希望使其以全屏模式运行 没有任务栏 我找到了如何隐藏窗口栏 但是当我启动应用程序时 它并没有覆盖窗口任务栏的空间 尽管最后一个是隐藏的 我找到了这个 https stackoverflow com questions 50
  • struts 配置文件中定义的跨不同包的全局结果

    我想创建一个global results跨不同名称空间下的不同包 我可以知道 struts 配置文件中需要遵循的约定吗 在其他包扩展的包中定义全局结果 例如
  • 在使用 MapWhen 进行分支时注册中间件,以便仅针对一组端点运行它

    我需要为所有端点运行两个中间件 但 accounts 下的端点除外 我在配置服务中使用它 public void ConfigureServices IServiceCollection services services AddContr