前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ASP.NET Web API路由系统:Web Host下的URL路由

ASP.NET Web API路由系统:Web Host下的URL路由

作者头像
蒋金楠
发布于 2018-01-15 11:18:01
发布于 2018-01-15 11:18:01
1.7K00
代码可运行
举报
文章被收录于专栏:大内老A大内老A
运行总次数:0
代码可运行

ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于不同的应用程序中。如果采用Web Host的方式将定义Web API寄宿于一个Web应用之中,其实最终的URL路由还是通过ASP.NET本身的路由系统完成的,那么两个路由系统之间是如何衔接在一起的呢?。

目录 一、HostedHttpRoute 二、HttpWebRoute 三、HostedHttpRouteCollection 四、HttpControllerRouteHandler 五、HttpControllerHandler

前文我们谈到包括路由注册在内的对整个ASP.NET Web API管道的配置是通过HttpConfiguration来完成的。对于Web Host这种寄宿方式,这么一个HttpConfiguration可以通过静态类型GlobalConfiguration来获取。如下面的代码片断所示,GlobalConfiguration具有一个静态只读属性Configuration,它返回的正式我们用于配置的全局HttpConfiguration对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: public static class GlobalConfiguration
   2: {
   3:     //其他成员
   4:     private static Lazy<HttpConfiguration> _configuration = new Lazy<HttpConfiguration>(delegate {
   5:         HttpConfiguration config = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes));
   6:         //其他操作
   7:         return config;
   8:     });
   9:     
  10:     public static HttpConfiguration Configuration
  11:     {
  12:         get
  13:         {
  14:             return _configuration.Value;
  15:         }
  16:     }
  17: }

如上面的代码片断所示,GlobalConfiguration的Configuration属性采用了延迟加载的模式来设计的。从对字段_configuration的初始化代表我们可以看到:返回的HttpConfiguration包含的路由表的真实类型并不是我们上面介绍的HttpRouteCollection,而是一个叫做HostedHttpRouteCollection的类型。HostedHttpRouteCollection是一个定义在System.Web.Http.WebHost.Routing命名空间下的内部类型,它直接继承自HttpRouteCollection。包含在HostedHttpRouteCollection之中的Route的类型也不是HttpRoute,而是HostedHttpRoute。

一、HostedHttpRoute

与HostedHttpRouteCollection一样,HostedHttpRoute也是System.Web.Http.WebHost.Routing命名空间下的一个内部类型,它直接实现了接口IHttpRoute(而不是继承自HttpRoute)。HostedHttpRoute可以看成是对一个Route对象的封装,这个被封装的Route对象对应着只读属性OriginalRoute。实现在HostedHttpRoute之中的核心路由功能基本上是通过这个Route对象完成的,所以我们才说Web Host下的ASP.NET Web API的URL路由最终还是利用ASP.NET自身的路由系统实现的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpRoute : IHttpRoute
   2: {
   3:     public HostedHttpRoute(string uriTemplate, 
   4:     IDictionary<string, object> defaults, 
   5:     IDictionary<string, object> constraints, 
   6:     IDictionary<string, object> dataTokens, HttpMessageHandler handler);
   7:  
   8:     public IHttpRouteData GetRouteData(string rootVirtualPath, HttpRequestMessage request);
   9:     public IHttpVirtualPathData GetVirtualPath(HttpRequestMessage request, IDictionary<string, object> values);
  10:  
  11:     public IDictionary<string, object>    Constraints { get; }
  12:     public IDictionary<string, object>    DataTokens { get; }
  13:     public IDictionary<string, object>    Defaults { get; }
  14:     public HttpMessageHandler             Handler { get; }
  15:     internal Route                        OriginalRoute { get; }
  16:     public string                         RouteTemplate { get; }
  17: }

在正常情况下,当我们调用HostedHttpRoute的GetRouteData或者GetVirtualPath方法的时候,当前HTTP上下文对象已经被方式表示当前HTTP请求的HttpRequestMessage的属性字典中,对应的Key为“MS_HttpContext”。HostedHttpRoute可以直接这个Key从通过HttpRequestMessage的Properties属性表示的属性字典中获取当前HTTP上下文。

对于GetRouteData方法来说,它会将此HTTP上下文作为参数调用通过属性OriginalRoute属性表示的Route对象的GetRouteData方法。如果返回一个具体的RouteData对象,它会被转换成一个具有如下定义的HostedHttpRouteData对象并返回。如果调用Route的GetRouteData方法返回Null,最终的返回结果自然为Null。对于返回的HostedHttpRouteData对象来说,其Route属性自然是对自身的引用,RouteData的Values属性直接作为HostedHttpRouteData对象的同名属性,而OriginalRouteData属性直接就是对该RouteData对象的引用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpRouteData : IHttpRouteData
   2: {
   3:     public HostedHttpRouteData(RouteData routeData);
   4:  
   5:     public IHttpRoute                      Route { get; }
   6:     public IDictionary<string, object>     Values { get; }
   7:     internal RouteData                     OriginalRouteData { get; }
   8: }

对于GetVirtualPath方法来说,逻辑稍微复杂一些。除了得到当前HTTP上下文之外,HostedHttpRoute还会通过调用扩展方法GetRouteData方法获取附加在HttpRequestMessage对象上的HttpRouteData对象。在这种情况下,得到的HttpRouteData实际上就是一个HostedHttpRouteData对象,所以它可以通过其OriginalRouteData属性得到原始的RouteData。随后HostedHttpRoute根据得到HTTP上下文和RouteData创建一个RequestContext对象,并将其作为参数调用Route对象的GetVirtualPath方法,传输的参数除了该RequestContext对象之外还有一个根据values参数创建的RouteValueDictionary对象。如果该方法调用返回一个具体的VirtualPathData对象,HostedHttpRoute会将其转换成一个具有如下定义的HostedHttpVirtualPathData对象,该对象的用于返回生成URL的VirtualPath属性自然对应于VirtualPathData的VirtualPath属性。倘若方法返回Null,那么最终返回的自然就是Null。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpVirtualPathData : IHttpVirtualPathData
   2: {   
   3:     public HostedHttpVirtualPathData(VirtualPathData virtualPath, IHttpRoute httpRoute);
   4:    
   5:     public IHttpRoute     Route { get; private set; }
   6:     public string         VirtualPath { get; set; }
   7: }

上面介绍的关于HostedHttpRoute的两个方法GetRouteData和GetVirtualPath的逻辑基本上可以通过如下的代码片断来体现(真实的代码于此稍有不同)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpRoute : IHttpRoute
   2: {
   3:     //其他成员
   4:     public IHttpRouteData GetRouteData(string rootVirtualPath, HttpRequestMessage request)
   5:     {      
   6:         HttpContextBase httpContextBase;
   7:         if (!request.Properties.TryGetValue<HttpContextBase>("MS_HttpContext", out httpContextBase))
   8:         {
   9:             return null;
  10:         }    
  11:         RouteData routeData = this.OriginalRoute.GetRouteData(httpContextBase);
  12:         if (routeData != null)
  13:         {
  14:             return new HostedHttpRouteData(routeData);
  15:         }
  16:         return null;
  17:     }
  18:  
  19:     public IHttpVirtualPathData GetVirtualPath(HttpRequestMessage request, IDictionary<string, object> values)
  20:     {       
  21:         HttpContextBase httpContextBase = request.GetHttpContext();
  22:         if (httpContextBase != null)
  23:         {
  24:             HostedHttpRouteData routeData = request.GetRouteData() as HostedHttpRouteData;
  25:             if (routeData != null)
  26:             {
  27:                 RequestContext requestContext = new RequestContext(httpContextBase, routeData.OriginalRouteData);
  28:                 VirtualPathData virtualPathData = this.OriginalRoute.GetVirtualPath(requestContext, new RouteValueDictionary(values));
  29:                 if (virtualPathData != null)
  30:                 {
  31:                     return new HostedHttpVirtualPathData(virtualPathData, routeData.Route);
  32:                 }
  33:             }
  34:         }
  35:         return null;
  36:     }
  37: }

二、HttpWebRoute

HostedHttpRoute的只读属性OriginalRoute在构造函数中初始化,其真实类型并非Route,而是它具有如下定义的子类HttpWebRoute。HttpWebRoute返回的是创建它的HttpRoute对象,在此情况下自然就是创建它的HostedHttpRoute对象。对于重写的GetRouteData和GetVirtualPath,如果HttpRoute属性类型为HostedHttpRoute(在此情况下此条件永远成立),它们会直接调用基类Route的同名方法。除此之外,HttpWebRoute还重写了用于检验约束的ProcessConstraint方法,在该方法中如果表示约束的constraint参数是一个HttpRouteConstraint对象(在此情况下此条件永远成立),它会根据HTTP上下文创建一个HttpRequestMessage对象,并将其作为参数传入HttpRouteConstraint对象的Match方法进行约束检验。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HttpWebRoute : Route
   2: {   
   3:     public HttpWebRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler, IHttpRoute httpRoute);
   4:    
   5:     public override RouteData GetRouteData(HttpContextBase httpContext);   
   6:     public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values);
   7:  
   8:     protected override bool ProcessConstraint(HttpContextBase httpContext, object constraint, string parameterName, RouteValueDictionary values, RouteDirection routeDirection);
   9:  
  10:     public IHttpRoute HttpRoute { get; }
  11: }

到此为止,我们基本上可以清楚地了解到ASP.NET Web API路由系统在Web Host情况下是如何利用ASP.NET自身的路有系统实现URL路由的:ASP.NET Web API路由系统中的HostedHttpRoute对象通过创建ASP.NET路由系统的HttpWebRoute进行基于URL模板的路由解析,但是针对约束的检验依然是利用ASP.NET Web API路由系统中的HttpRouteConstraint来完成的。

三、HostedHttpRouteCollection

上面我们对ASP.NET Web API在Web Host下采用的路由类型HostedHttpRoute作了详细介绍,对于通过静态类型GlobalConfiguration的Configuration属性获取到的用于配置请求处理管道的HttpConfiguration对象,我们也指出通过其Routes属性返回的路由表类型是HostedHttpRouteCollection,但是依然没有回答:调用该对象的扩展方法MapHttpRoute进行路由影射时对应的HostedHttpRoute对象是如何创建并添加的?

在上面介绍HttpRouteCollection的扩展方法的时候提到过:该方法调用HttpRouteCollection的CreateRoute方法最终实现对HttpRoute的创建。HostedHttpRouteCollection就是通过重现该方法来创建HostedHttpRoute的,如下所示的代码片断体现了该方法的实现逻辑。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpRouteCollection : HttpRouteCollection
   2: {
   3:     //其他成员
   4:     public override IHttpRoute CreateRoute(string uriTemplate, IDictionary<string, object> defaults, IDictionary<string, object> constraints, IDictionary<string, object> dataTokens, HttpMessageHandler handler)
   5:     {
   6:         return new HostedHttpRoute(uriTemplate, defaults, constraints, dataTokens, handler);
   7:     }
   8: }

既然ASP.NET Web API在Web Host模式下依然是借助ASP.NET自身的路由系统实现URL路由,那么意味着当我们针对ASP.NET Web API进行路由映射的时候必须在ASP.NET路由系统的全局路由表中添加对一个继承自抽象类RouteBase的Route对象(而不是实现了接口IHttpRoute的HttpRoute对象)。说得更加具体一点,当我们针对一个HostedHttpRouteCollection对象调用其扩展方法MapHttpRoute方法的时候,创建的HostedHttpRoute对象必须被转换成一个Route对象。

通过上面的介绍,HostedHttpRoute对象实际上是对一个HttpWebRoute对象的封装,对应其OriginalRoute属性,最终被添加到ASP.NET全局路由表的就是这么一个HttpWebRoute对象。如下面的代码片断所示,HostedHttpRouteCollection具有一个RouteCollection类型的字段_routeCollection。通过前面GlobalConfiguration的定义我们知道,默认使用的HostedHttpRouteCollection是根据通过RouteTable的静态属性Routes表示的ASP.NET路由表创建的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpRouteCollection : HttpRouteCollection
   2: {
   3:     //其他成员
   4:     private readonly RouteCollection _routeCollection;
   5:  
   6:     public HostedHttpRouteCollection(RouteCollection routeCollection)
   7:     {    
   8:         this._routeCollection = routeCollection;
   9:     }
  10:  
  11:     public override void Add(string name, IHttpRoute route)
  12:     {
  13:         this._routeCollection.Add(name, 
route.ToRoute()
);
  14:     }
  15: }

HostedHttpRouteCollection重写了Add方法,它会将添加的HttpRoute对象转换成Route对象并添加到ASP.NET的全局路由表中。如果添加的HttpRoute是一个HostedHttpRoute对象,被“转换”后的Route对象就是通过其OriginalRoute属性表示的HttpWebRoute对象。

通过前面针对ASP.NET路由实现原理的介绍,我们知道整个路由系统的核心是一个叫做UrlRoutingModule的HttpModule,它通过注册HttpApplication的PostResolveRequestCache事件的注册实现了请求的拦截,并动态映射一个HttpHandler来实现对请求的处理和响应。通过UrlRoutingModule映射的HttpHandler来源于与当前请求匹配的Route对象。说得更加具体一点,Route利用通过其RouteHandler提供对应的HttpHandler用于处理与之匹配的请求。Web Host模式下的ASP.NET Web API使用的Route类型为HttpWebRoute,它的RouteHandler是一个类型为System.Web.Http.WebHost.HttpControllerRouteHandler的对象,而后者提供的HttpHandler类型为System.Web.Http.WebHost.HttpControllerHandler。

四、HttpControllerRouteHandler

通过上面的介绍我们知道ASP.NET Web API在Web Host下真正使用的Route是一个类型为HttpWebRoute的对象,而该对象被ASP.NET Web API路由系统下一个类型为HostedHttpRoute的对象封装,那么HttpWebRoute最终用于处理与之匹配的请求的HttpHandler是什么呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: internal class HostedHttpRoute : IHttpRoute
   2: {
   3:     //其他成员
   4:     public HostedHttpRoute(string uriTemplate, IDictionary<string, object> defaults,     IDictionary<string, object> constraints, IDictionary<string, object> dataTokens, HttpMessageHandler handler)
   5:     {
   6:         //其他操作
   7:         this.OriginalRoute = new HttpWebRoute(uriTemplate, routeDefaults, 
   8:         routeConstraints, routeDataTokens, 
   9:         HttpControllerRouteHandler.Instance, this);   
  10:     }
  11: }
  12:  
  13: public class HttpControllerRouteHandler : IRouteHandler
  14: {   
  15:     protected HttpControllerRouteHandler();
  16:     protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext);
  17:     IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext);
  18:  
  19:     public static HttpControllerRouteHandler Instance { get; }
  20: }

HostedHttpRoute通过只读属性OriginalRoute引用被其封装的HttpWebRoute对象。如上面的代码片断所示,当HostedHttpRoute在对该属性进行初始化的时候为其指定的RouteHandler对象通过HttpControllerRouteHandler的静态属性Instance提供,实际上它以单例的模式(通过“延迟加载”的方式实现)提供一个HttpControllerRouteHandler对象。

五、HttpControllerHandler

RouteHandler之于Route的最终目的在于提供一个具体的HttpHandler来处理与之匹配的请求,HttpWebRoute的RouteHandler是一个HttpControllerRouteHandler对象,而后者具体提供一个怎样的HttpHandler呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   1: public class HttpControllerRouteHandler : IRouteHandler
   2: {
   3:     //其他成员   
   4:     protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
   5:     {
   6:         return new HttpControllerHandler(requestContext.RouteData);
   7:     }
   8:  
   9:     IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
  10:     {
  11:         return this.GetHttpHandler(requestContext);
  12:     }
  13: }
  14:  
  15: public class HttpControllerHandler : HttpTaskAsyncHandler
  16: {
  17:     //省略成员
  18: }

如上面的代码片断所示,HttpControllerRouteHandler实现的GetHttpHandler方法返回的是一个类型为HttpControllerHandler对象。HttpControllerHandler直接继承自HttpTaskAsyncHandler,所以它是一个异步模式的HttpHandler。ASP.NET Web API提供一个管道来处理请求和响应回复,毫不夸张地说:整个消息处理管道就是通过HttpControllerHandler这个HttpHandler创建的。

当我们将定义的Web API已Web Host模式部署在某个Web应用中并进行相应的路由影射,这些注册的HttpRoute(HostedHttpRoute)最终转换成ASP.NET全局路由表中的Route(HttpWebRoute)。ASP.NET路由系统对每个抵达的请求进行拦截,如果当前请求与路由表中的某个Route匹配,相应的路由数据被解析出来并保存在RequestContext中。

随后,ASP.NET路由系统的实现者UrlRoutingModule从匹配的Route中获取RouteHandler,这是一个HttpControllerRouteHandler对象,后者提供的HttpHandler(一个HttpControllerHandler对象)被UrlRoutingModule映射到当前请求。HttpHandler一旦成功映射,HttpControllerHandler将最终接管当前请求,而它会构造整个消息处理管道来处理这个请求并对请求予以响应。至于ASP.NET Web API的消息处理管道以及HttpControllerHandler对它的创建,我们会在后续的文章中进行详细介绍。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-07-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
TVS和ESD那些事儿
过压脉冲如ESD和浪涌会对半导体器件产生不利影响,如导致绝缘击穿、功能停止或元件劣化。
ElectricDeveloper
2022/09/22
2.1K1
TVS和ESD那些事儿
想要深入了解EMC,看完这篇就差不多了!
电磁干扰(Electromagnetic Interference),简称EMI,有传导干扰和辐射干扰两种。传导干扰主要是电子设备产生的干扰信号通过导电介质或公共电源线互相产生干扰;辐射干扰是指电子设备产生的干扰信号通过空间耦合把干扰信号传给另一个电网络或电子设备。
AI 电堂
2020/07/27
2.6K0
想要深入了解EMC,看完这篇就差不多了!
电子元器件基础知识大全详解
对于电子行业的工程师来说,电子元件,就像人们入口的大米,每天都需要接触和使用。但事实上,许多工程师可能都不完全理解里面的门道。以下是工程师常用的十种电子元件以及相关的基本概念和知识。让我们一起学习了解一下。
电子交流圈
2022/03/21
1.4K0
什么是EMC?什么是EMI?什么是EMS?电磁兼容详解(一)
EMC(Electro Magnetic Compatibility,电磁兼容)是指电子、电气设备或系统在预期的电磁环境中,按设计要求正常工作的能力。它是电子、电气设备或系统的一种重要的技术性能,其包括三方面的含义:
利又德智能感知
2023/04/11
12.4K0
什么是EMC?什么是EMI?什么是EMS?电磁兼容详解(一)
RS485通信如何设计EMC电路?
在实际工业和仪器仪表(I&I)应用中,RS-485接口链路需要在恶劣电磁环境下工作。雷击、静电放电和其他电磁现象引起的大瞬变电压可能损坏通信端口。为了确保这些数据端口能够在最终安装环境中正常 工作,它们必须符合某些电磁兼容性(EMC)法规。
不脱发的程序猿
2021/08/10
1.1K0
干货|详解消灭EMC的三大利器:电容器/电感/磁珠
滤波电容器、共模电感、磁珠在EMC设计电路中是常见的身影,也是消灭电磁干扰的三大利器。
MCU起航
2020/08/04
7880
干货|详解消灭EMC的三大利器:电容器/电感/磁珠
设计低泄漏飞安电路,第 2 部分:组件选择
第1部分定义并描述了承载这些低电流的设计,解释了设计这些电路时出现的问题,并研究了屏蔽和防护方法的应用。在第 2 部分中,将研究元件选择如何影响低泄漏电路的性能,并讨论噪声如何渗透到低泄漏设计中。
云深无际
2024/08/20
1610
设计低泄漏飞安电路,第 2 部分:组件选择
网络设备为什么要防雷?防雷可不是小事,作为网工一定不要马虎!
雷电,这一地球大气中震撼人心的剧烈放电现象,长久以来激发着人类无尽的敬畏之心。然而,随着科技的飞速进步与社会的蓬勃发展,我们已构建起由计算机、各类网络及通信设备交织而成的“信息高速公路”,极大地丰富了信息交流与传递的方式。
ICT系统集成阿祥
2024/12/03
1980
网络设备为什么要防雷?防雷可不是小事,作为网工一定不要马虎!
浅谈EMC电磁兼容设计—概念篇
EMC(Electro Magnetic Compatibility)——电磁兼容,是指电子、电气设备或系统在预期的电磁环境中,按设计要求正常工作的能力。就世界范围来说,电磁兼容性问题已经形成一门新的学科,也是一门以电磁场理论为基础,包括信息、电工、电子、通信、材料、结构等学科的边缘科学,同时也是一门实践性比较强的学科,需要产品工程师具有丰富的实践知识。
不脱发的程序猿
2021/01/20
1.1K0
今日说“法”:上拉、下拉电阻那点事
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
9920
今日说“法”:上拉、下拉电阻那点事
电磁兼容(EMC)的标准与测试内容
在国际范围上,电磁兼容标准的制定已经有了70多年的发展历程,最早为了保护无线电通信和广播,国际无线电干扰特别委员会(CISPR)对各种用电设备和系统提出了相关的电磁干扰发射限值和测量方法。到了20世纪60~70年代,由于电子、电气设备的小型化、数字化和低功耗化,人们开始考虑设备的抗干扰能力,世界各大标准化组织和各国政府机构也相继制定了许许多多的电磁兼容标准。咱们今天就和海翎光电的小编一起来聊聊电磁兼容的基础知识和测试内容。
利又德智能感知
2023/02/03
2.7K0
电磁兼容(EMC)的标准与测试内容
常用电子元器件基本知识整理
它是导体的一种基本性质,与温度、材质、尺寸、横截面积相关。。电阻的主要物理特征是把电能变为热能,也可说它是一个耗能元件,电流经过它就产生内能,所以注意在选用电阻的时候要算一下电路的流过的电流,并选用合适功率的电阻,防止电阻由于过度发热产生不必要的麻烦。
电子交流圈
2022/03/21
6320
详解EMC测试国家标准GB/T 17626
最近公司的几块板子要做认证,EMC测试自然是少不了,既然要做试验,就要有一个标准,是消费电子、工业控制,还是汽车电子、军工电子,这些工作环境所要求的EMC测试标准是不同的,每个试验又分为了很多的等级。接触静电是要做到6kV还是8kV,空气放电是要做到8kV还是15kV?我的产品要做哪些EMC试验?要做到什么等级?一起来了解一下关于EMC测试的国家标准吧!上一篇文章介绍了《详解电子产品认证类型》,本文介绍EMC测试中涉及的GB/T17626系列相关国家标准,文末有GB/T17626国家标准电子文档下载地址。
单片机点灯小能手
2020/07/16
3.1K0
电子元件-TVS与肖特基二极管
内容包括瞬态抑制二极管与肖特基二极管的一般介绍,详述普通二极管与肖特基二极管的恢复时间,肖特基二极管在开关电源与反向保护中的应用。持续更新,CSDN爱上电路设计原创!
爱上电路设计
2023/09/05
5020
电子元件-TVS与肖特基二极管
eFuse电子保险丝,需要了解的技术干货来啦
eFuse基于一个简单概念,即通过测量已知电阻器上的电压来检测电流,然后在电流超过设计限值时,通过场效应晶体管(FET)切断电流。eFuse具有热保险丝无法实现特性、灵活性和功能。
芯动大师
2024/06/14
1.5K2
eFuse电子保险丝,需要了解的技术干货来啦
高级硬件工程师设计电路考虑的问题有哪些区别?
1、 D1在大多数CMOS集成电路中起着防静电功能.同时辅助起着输入端限幅作用。但是在ABT,LVT,LVC和AHC/AHCT类集成电路中无此二极管。
硬件开源小站
2024/11/07
1220
104条PCB 布局布线技巧问答
2、[问] 在布板时,如果线密,过孔就可能要多,当然就会影响板子的电气性能,请问怎样提高板子的电气性能?
硬件开源小站
2023/04/14
1.3K1
现代医学电子仪器原理与设计实验.电阻电容电感
去年就买这本书了,我顺手就揣回来了,上面说了几个仪器,我觉得还挺综合,让我们在年末为来一次收官活动。
云深无际
2024/12/25
970
现代医学电子仪器原理与设计实验.电阻电容电感
55条数字模拟电路总结
不是学这个得,但是一直是一个这方面得爱好者,整理一些笔记,记录一下 1、HC为COMS电平,HCT为TTL电平 2、LS输入开路为高电平,HC输入不允许开路,HC一般都要求有上下拉电阻来确定输入端无
云深无际
2021/04/14
9360
55条数字模拟电路总结
电容与部分电容_接地电容不能太大
电容,和电感、电阻一起,是电子学三大基本无源器件;电容的功能就是以电场能的形式储存电能量。
全栈程序员站长
2022/09/23
1.2K0
电容与部分电容_接地电容不能太大
推荐阅读
相关推荐
TVS和ESD那些事儿
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档