首页
学习
活动
专区
工具
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.1K10
  • 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.

    21100

    在 .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

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

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

    2.5K20

    如何将.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 各版本特性简单整理

    介绍 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.3K20

    《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 会根据是否配置指定请求路径来决定是否在一个新分支继续执行后续中间件

    90310

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

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

    4.4K70

    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 Web API下Controller激活与释放流程

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

    62420

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

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

    90980

    .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 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 Core处理中止请求

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

    80010

    如何让ASP.NET Web APIAction方法在希望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
    领券