首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在运行在ASP.NET Core2.2上的中间件中,有没有办法检测该请求是否是针对ApiController的?

在运行在ASP.NET Core 2.2上的中间件中,可以通过检查请求的特定属性来判断请求是否针对ApiController。

在ASP.NET Core中,ApiController是用于处理Web API请求的基类。要检测一个请求是否针对ApiController,可以使用以下方法:

  1. 首先,通过检查请求中的路由信息来确定请求是否匹配到了API控制器。可以使用HttpContext.GetEndpoint()方法获取当前请求所匹配到的端点信息。
  2. 如果请求匹配到了端点,可以检查端点是否包含ControllerActionDescriptor类型的元数据。这可以通过将端点转换为ControllerActionDescriptor来实现。
  3. 一旦获得了ControllerActionDescriptor,可以检查其ControllerTypeInfo属性以获取控制器类型信息。如果该属性不为null,则表示该请求是针对ApiController的。

以下是一个示例代码,演示如何在中间件中检测请求是否针对ApiController:

代码语言:txt
复制
public class ApiControllerDetectionMiddleware
{
    private readonly RequestDelegate _next;

    public ApiControllerDetectionMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        var endpoint = context.GetEndpoint();
        var controllerActionDescriptor = endpoint?.Metadata.GetMetadata<ControllerActionDescriptor>();

        if (controllerActionDescriptor != null)
        {
            // 请求针对ApiController
            // 可以在这里执行自定义逻辑
            // 例如记录日志、鉴权、跟踪等

            // 以下是一些示例代码
            var controllerType = controllerActionDescriptor.ControllerTypeInfo.AsType();
            var controllerName = controllerType.Name;
            var actionName = controllerActionDescriptor.ActionName;

            Console.WriteLine($"请求针对ApiController:{controllerName}.{actionName}");
        }

        await _next(context);
    }
}

此代码可以作为中间件在ASP.NET Core 2.2的请求管道中使用。在Invoke方法中,首先获取当前请求的端点信息,然后检查该端点是否包含ControllerActionDescriptor类型的元数据。如果存在,则说明请求针对ApiController,可以在此处执行自定义逻辑。

请注意,此代码仅适用于ASP.NET Core 2.2版本。对于其他版本的ASP.NET Core,可能需要相应地进行调整。

关于腾讯云相关产品和产品介绍链接地址,这里不予提供具体信息,请您自行查阅腾讯云官方文档或网站获取相关内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET Core 学习资料精选:入门

中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化 b) 比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API 分别编写代码...Core WebAPI中,Controller标注 [ApiController] 特性,其路由只能使用[route]特性方式 ASP.NET Core MVC 构建可读性更高的ASP.NET Core...路由 ASP.NET Core 中的模型绑定 ASP.NET Core 中的自定义模型绑定(IModelBinder) ASP.NET Core 中的 URL 重写中间件 依赖注入(IOC、DI) 什么是控制反转...Core HttpClient的各种用法、生命周期管理 DotNetCore 使用Http请求及基于 Polly 的处理故障 DotNetCore 中 HttpClientFactory 类源码分析...#、gRPC ASP.NET Core 3.0 上的gRPC服务模板初体验(多图) ASP.NET Core gRPC的配置 发布部署 ASP.NET Core 使用 IIS 进行托管部署 ASP.NET

3.8K20

ASP.NET Core端点路由 作用原理

端点路由(Endpoint Routing)最早出现在ASP.NET Core2.2,在ASP.NET Core3.0提升为一等公民。 ?...Endpoint Routing的动机 在端点路由出现之前,我们一般在请求处理管道的末尾,定义MVC中间件解析路由。这种方式意味着在处理管道中,MVC中间件之前的中间件将无法获得路由信息。...Endpoint Routing中间件 由一对中间件组成: UseRouting 将路由匹配添加到中间件管道。该中间件查看应用程序中定义的端点集合,并根据请求选择最佳匹配。...中间件:始终无法感知 Endpoint; 处于这对中间件之间的 中间件,将会感知到被匹配的Endpoint,并有能力附加处理逻辑; UseEndpoints是一个终点中间件; 没有匹配,则进入UseEndpoints...结论 端点路由:允许ASP.NET Core应用程序在中间件管道的早期确定要调度的端点, 以便后续中间件可以使用该信息来提供当前管道配置无法提供的功能。

1.2K10
  • 【ASP.NET Core 基础知识】--Web API--创建和配置Web API(二)

    以下是在 Web API 中读取资源的步骤: 在控制器中添加用于读取资源的 API 端点。通过接收 GET 请求,从数据库中获取资源,并将其返回给客户端。...UpdateProduct 方法根据传入的 ID 获取现有产品资源,然后将客户端提供的更新应用于该资源,并保存到数据库中。...确保在更新之前验证资源是否存在,并适当处理不存在的情况。通过这些步骤,你就能够在 ASP.NET Core Web API 中成功实现更新资源的功能。...以下是在Web API中实现全局异常处理的基本步骤: 创建异常处理中间件 在Startup.cs文件的Configure方法中添加异常处理中间件: public void Configure(IApplicationBuilder...以下是一些在不同环境中部署ASP.NET Core Web API的常见步骤: 环境配置 在ASP.NET Core中,你可以使用appsettings.

    30300

    在 .NET Core 中运行 JavaScript

    关于为何有在 .NET Core 中执行 JavaScript 这种需求,比较特殊,举个栗子:当你做模拟登录时,目标网站可能采用一些加密算法来计算特殊的值,如果你要完全模拟,那么除了用C#翻译这个算法还有个办法就是直接将这段加密算法...二.什么是 NodeServices NodeServices 是一个 ASP.NET Core 中间件,将它添加到 ASP.NET Core 管道中,该中间件调用Node在运行时执行JavaScript...1.新建一个 ASP.NET Core 2.2 应用程序 2.然后通过Nuget安装包 Microsoft.AspNetCore.NodeServices(v2.2.0) 3.在Startup.cs文件的...,然后介绍如何在应用程序中执行一些简单的JavaScript 并捕获输出。...,并通过调用InvokeAsync方法来调用我们的Js代码,其中T是我们Js代码的返回类型(在这个实例中是一个string)。

    3.9K20

    如何将.NET项目迁移到.NET Core

    唯一的限制是,软件中必须包含上述版权和许可提示,后者协议将会除了为用户提供版权许可之外,还有专利许可,并且授权是免费,无排他性的(任何个人和企业都能获得授权)并且永久不可撤销,用户使用.NET Core...完全不用担心收费问题,你可以很自由的部署在任何地方. 2.轻量级、跨平台 3.组件化、模块化、IOC+Nuget、中间件 4.高性能 5.统一了MVC和WebAPI编程模型 a) 比如:ASP.NET...Core 中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化 b) 比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API...Core可以在“.NET Framework 和 .NET Core”上运行,但ASP.NET Core 3.0 以及更高版本只能在 .NET Core 中运行。...(),此办法不能获取到所有依赖的程序集,因为.Net有延迟加载程序集机制 方案二:适用于传统ASP.NET项目,System.Web.Compilation.BuildManager.GetReferencedAssemblies

    1.8K40

    ASP.NET Core 在 IIS 下的两种部署模式

    应用部署好之后,我们利用浏览器采用地址“http://localhost/webapp”访问部署好的应用,从图2所示的输出结果可以看出ASP.NET CORE应用实际上就运行在IIS的工作进程中。...如图3所示,在这种部署下,采用KestrelServer的ASP.NET CORE应用运行在独立的dotnet.exe进程中。...IISMiddleware中间件完成了针对“配对Token”的验证过滤非IIS转发的请求。...中间件在接收到该请求时会利用注入的IHostApplicationLifetime对象关闭当前应用。...由于IISMiddleware中间件所作的实际上是对HttpContext上下文进行初始化的工作,所以它必须优先执行才有意义,为了将此中间件置于管道的前端,如下这个IISSetupFilter被定义出来完成对该中间件的注册

    2.7K20

    ASP.NET Core 各版本特性简单整理

    介绍 ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。...在.NET Core上运行。 相关:在 ASP.NET 4.x 和 ASP.NET Core 之间进行选择 ?...Core 2.1 的新增功能 新增功能 SignalR(已针对 ASP.NET Core 2.1 重新编写 SignalR:新 JavaScript 客户端不具有 jQuery 依赖项,新紧凑型二进制协议基于...], ActionResult(注:ApiController 特性自带了请求内容验证拦截,这个当初也是坑了不少人,就我自己而言在实际使用中是将它关闭的,对于参数验证处理逻辑自己有一套逻辑) IHttpClientFactory...根据请求提供事件计数器 增强了端点路由,可以让框架(例如 MVC)与中间件配合使用 ASP.NET Core 3.0 仅在 .NET Core 3.0 上运行(不再支持.NET Framework)

    3.4K20

    基于.net8在 ASP.NET Core 中掌握 API 密钥身份验证

    突然之间,您的服务变得安全并受到保护,不会受到未经授权的访问!您知道在 ASP.NET Core 中实施 API 密钥身份验证是多么容易吗?...API 密钥是一种简单的身份验证形式,它允许客户端通过在请求中包含密钥来访问 API。它不如 OAuth 或 JWT 全面,但对于需要基本访问控制而又不复杂的场景,它是一个很好的解决方案。...dotnet new webapi -n ApiKeyAuthExample 在您喜欢的 IDE 中打开新创建的项目,并添加一个名为 :WeatherForecastController [ApiController...第 2 步:添加 API 密钥身份验证中间件 要添加 API 密钥身份验证,我们需要创建自定义中间件,它将: 检查每个传入请求是否存在 API 密钥。 验证 API 密钥。...X-API-KEY401 Unauthorized 第 3 步:注册 Middleware 在 中,将中间件添加到请求管道的行之前:Program.csapp.MapControllers() var

    14310

    《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(上)

    : 配置 Kestrel 服务器作为默认的 Web 服务器来负责处理 Web 请求与响应 使用当前目录作为应用程序的内容目录,该目录决定了 ASP.NET Core 查找内容文件的位置 从以 ASPNETCORE...:生产 Kestrel 是轻量级、托管的、开源且跨平台的 Web 服务器,它作为 ASP.NET Core 的组成部分,能够使 ASP.NET Core 应用程序运行在任何平台上 当 Kestrel 作为...所谓中间件,就是处理 HTTP 请求和响应的组件,本质上是一段用来处理请求与响应的代码,多个中间件之间的链式关系使之形成了管道 ASP.NET Core 中内置了多个中间件,它们主要包含 MVC 认证...HTTP 请求以及 HTTP 响应遍历它们的顺序 每一个中间件都是通过调用 IApplicationBuilder 接口的 Use 和 Run 方法添加到请求管道中的 下面的例子是使用 Run 方法来添加一个中间件...Map、MapWhen 以及 UseWhen 方法,它们都可以指定条件,并在条件满足时创建新的分支管道,同时在新的分支上添加并执行中间件 Map 会根据是否配置指定的请求路径来决定是否在一个新分支上继续执行后续的中间件

    90810

    ASP.NET Core 实战:构建带有版本控制的 API 接口

    ASP.NET Core 的本质上可以看成是一个控制台程序,在我们创建好的 ASP.NET Core Web API 项目中,存在着两个类文件:Program.cs 以及 Startup.cs。...与控制台应用一样,Program 类中的 Main 方法是整个程序的入口,在这个方法中,我们将配置好的 IWebHostBuilder 对象,构建成 IWebHost 对象,并运行该 IWebHost...容器中,而这些容器中的服务,最终都可以在 Configure 方法中进行使用;而 Configure 方法则用于指定 ASP.NET Core 应用程序将如何响应每一个 HTTP 请求,我们可以在这里将我们自己创建的中间件...当 ASP.NET Core 的脚手架程序添加完成 Area 后,则会打开一个文件提示我们需要在 MVC 中间件中创建适用于 Area 的路由定义。...虽然我们请求的 Url 中已经带上了版本信息,但是 API 文档上显示的请求地址却是不准确的,强迫症,不能忍。这里,需要我们修改生成 Swagger 文档的配置代码,将路由中的版本信息进行替换。

    1.2K30

    Asp.Net WebApi核心对象解析(一)

    在.NET的体系中的分布式技术主要有webservice,.net remoting,MSMQ,WCF等等,但是今天介绍的是Asp.Net WebApi,对于Asp.Net WebApi技术,估计很多人都不会陌生...在ASP.NET Web API中,一个控制器是处理HTTP请求的类。控制器的公共方法被称为动作方法或简单的动作。当Web API框架接收到一个请求,它请求路由到一个动作。...ApiController是ValuesController类的父类,是整个ASP.NET Web API的核心类,继承该类可以用来创建ASP.NET Web API控制器。...ApiController类中的公共静态(在Visual Basic中共享)成员是线程安全的,任何实例成员都不能保证是线程安全的。...下面介绍一下ApiController在ASP.NET Web API中所承担的任务如下:   (1).选择和运行控制器类上的一个操作方法。

    4.5K70

    总体介绍ASP.NET Web API下Controller的激活与释放流程

    通过《ASP.NET Web API的Controller是如何被创建的?》...当它完成路由解析工作之后(HttpRoutingDispatcher的路由解析只发生在Self Host寄宿模式下,对于Web Host寄宿模式来说,路由解析工作是由ASP.NET路由系统来完成的),在默认情况下它会将请求传递给一个...对于Web Host来说,ASP.NET Web API用于“处理请求、回复响应”的HttpMessageHandler管道是由HttpControllerHandler创建的,后者根据当前HTTP上下文创建一个表示当前请求的...对于请求消息来说,具体的资源释放工作包括针对HttpRequestMessage自身的释放和对附加到属性字典中资源的释放。...我们在一个控制台应用中定义了如下三个需要被释放的类型Foo、Bar和Baz,它们共同的基类DisposableObject实现了IDisposable接口,并在实现Dispose方法中通过输出一段文字以确定具体的释放操作是否被执行

    63520

    ASP.NET Core集成现有系统认证

    我们现在大多数转向ASP.NET Core来使用开发的团队,应该都不是从0开始搭建系统,而是老的业务系统已经在运行,ASP.NET Core用来开发新模块。...本文将给大家简单阐述一下认证与授权的基本概念,以及基于ASP.NET Core 中间件实现的认证和改造JwtBearer 认证中间件来实现的认证达到与老系统(主要是token-based认证)的集成。...认证是一个知道用户是谁的一个过程。我们最早使用的基于Session的认证,拿到用户输入的用户名和密码到数据库里面校验一,看看是否正确,如果是正确的我们就放到session里面。...我们需要在ASP.NET Core中根据当前用户header里面的token来判断是否为一个合法的用户。 用Middleware拦截 第一种简单粗暴的方法即用Middleware来拦截。...(不调用 next方法) 但是这种办法相当于一刀切,我们添加的这个Middleware发生在 MVC Middleware之前把所有没有认证信息的请求全部拦截掉了。

    2.7K90

    总体介绍ASP.NET Web API下Controller的激活与释放流程

    通过《ASP.NET Web API的Controller是如何被创建的?》...当它完成路由解析工作之后(HttpRoutingDispatcher的路由解析只发生在Self Host寄宿模式下,对于Web Host寄宿模式来说,路由解析工作是由ASP.NET路由系统来完成的),在默认情况下它会将请求传递给一个...对于Web Host来说,ASP.NET Web API用于“处理请求、回复响应”的HttpMessageHandler管道是由HttpControllerHandler创建的,后者根据当前HTTP上下文创建一个表示当前请求的...对于请求消息来说,具体的资源释放工作包括针对HttpRequestMessage自身的释放和对附加到属性字典中资源的释放。...我们在一个控制台应用中定义了如下三个需要被释放的类型Foo、Bar和Baz,它们共同的基类DisposableObject实现了IDisposable接口,并在实现Dispose方法中通过输出一段文字以确定具体的释放操作是否被执行

    91380

    .NET Core多平台开发体验: Windows

    除此之外,.NET Core针对Docker也提供了原生的支持,一个.NET Core应用可以同时运行在Windows Container和Linux Container上。...我们在前面已经提到过,ASP.NET Core应用建立在由一个服务器和若干中间件组成的管道上,最初对HTTP请求的监听以及最终对该请求的响应都由服务器完成。...整个ASP.NET Core MVC框架建立在一个名为RouterMiddleware的中间件上,它利用该中间件提供的路由功能实现了请求URL与目标Controller类型以及Action方法之间的映射...在针对Configure方法的调用中,我们调用IApplicationBuilder的扩展方法UseMvc注册了RouterMiddleware中间件以及针对ASP.NET Core MVC的路由处理器...按照约定,我们通常会将这个类型命名为Startup,比如我们演示实例中针对ASP.NET Core MVC的服务注册和中间件注册就可以放在如下定义的这个Startup类中。

    1.7K70

    如何让ASP.NET Web API的Action方法在希望的Culture下执行

    在今天编辑推荐的《Hello Web API系列教程——Web API与国际化》一文中,作者通过自定义的HttpMessageHandler的方式根据请求的Accep-Language报头设置当前线程UI...不过这些解决方案都不够完美,原因很简单:ASP.NET Web API的整个框架均采用基于Task的并行编程模式,所以每个可扩展组件均可以在不同的线程中执行,这样会导致我们没有办法100%控制目标方法真正执行的线程的...唯一的Action方法返回的字符串是从资源文件中提取的(类型Resources为资源文件自动生成的类型),而ActionFilterAttribute就应用在这个Get方法上。...,另一个则是针对中文的Resources.zh.resx。...HttpController时被调用的,所以我们可以在执行HttpController上作文章。

    1.3K90

    .NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

    今天我将带着大家一起来实现下我们的ASP.NET Core2.2开发的CMS系统的登录及验证码功能。...验证码实现流程 我们知道一个简单的验证码的实现原理是生成一串随机字符(数字或字母),将字符串保存到Session中,同时生成一张图片用来显示在网页上。...当用户提交内容到服务器的时,服务器检查用户输入的验证码是否与Session中的一致,以此判断验证码是否正确。流程如下图: ?...-Version 4.5.1 上面的流程中你可以看到我们需要用到Session来进行验证码的存储,所以我们也需要在ASP.NET Core2.2中启用Session支持。...这里有一个returnUrl 用来返回退出前的页面,默认返回首页 这里页面js的判断流程的js代码我就不贴出来了,如果有兴趣你可以访问文章底部的Github上的源码进行查看 代码提交后我们要首先验证验证码是否有效

    1.4K30

    ASP.NET Core中处理中止的请求

    当用户向应用程序发出请求时,服务器将解析该请求,生成响应,然后将结果发送给客户端。用户可能会在服务器处理请求的时候中止请求。就比如说用户跳转到另一个页面中获取说关闭页面。...在这种情况下,我们希望停止所有正在进行的工作,以浪费不必要的资源。例如我们可能要取消SQL请求、http调用请求、CPU密集型操作等。...ASP.NET Core提供了HTTPContext.RequestAborted检测客户端何时断开连接的属性,我们可以通过IsCancellationRequested以了解客户端是否中止连接。...[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase {...cancellationToken); return Array.Empty(); } } 当然我们可以通过如下代码片段以参数形式传递 [ApiController

    82010
    领券