如何判断当前请求的API类型

前言

上次,我们判断了《当前请求是否健康检查API》,避免其写入日志。

但是,对于我们自己开发的API来说,最好也能来区分,比如调试用API,就不需要再写调用日志了。

DisplayName方式

直接判断路由地址的方式就不考虑了。

本来想使用和上次一样的DisplayName方式,但是发现没有地方为Controller设置。

查看源码,发现Action的DisplayName属性的实现在ControllerActionDescriptor.cs:

public override string? DisplayName
{get{if (base.DisplayName == null && ControllerTypeInfo != null && MethodInfo != null){base.DisplayName = string.Format(CultureInfo.InvariantCulture,"{0}.{1} ({2})",TypeNameHelper.GetTypeDisplayName(ControllerTypeInfo),MethodInfo.Name,ControllerTypeInfo.Assembly.GetName().Name);}return base.DisplayName!;}set{if (value == null){throw new ArgumentNullException(nameof(value));}base.DisplayName = value;}
}

DisplayName是由"Controller类名.方法名 (Assembly名)"组成。

如果你的Controller类名/方法名命名有规律,可以考虑DisplayName方式。

Metadata方式

此路不通,考虑其他方式。

我们知道将Controller的方法添加为API端点是通过endpoints.MapControllers();,查看其实现源码,最终定位到ActionEndpointFactory.cs,其中有这样一段代码:

// MVC guarantees that when two of it's endpoints have the same route name they are equivalent. 
// 
// The case for this looks like: 
// 
// [HttpGet] 
// [HttpPost] 
// [Route("/Foo", Name = "Foo")] 
// public void DoStuff() { } 
// 
// However, Endpoint Routing requires Endpoint Names to be unique. 
// 
// We can use the route name as the endpoint name if it's not set. Note that there's no 
// attribute for this today so it's unlikley. Using endpoint name on a 
if (routeName != null && 
!suppressLinkGeneration && 
routeNames.Add(routeName) && 
builder.Metadata.OfType<IEndpointNameMetadata>().LastOrDefault()?.EndpointName == null) 
{ 
builder.Metadata.Add(new EndpointNameMetadata(routeName)); 
}

通过注释,我们可以知道Asp.Net Core会把RouteName写入端点的Metadata属性。

那么,我们只需要判断EndpointNameMetadata即可:

var endpointName = context.GetEndpoint()?.Metadata.GetMetadata<EndpointNameMetadata>()?.EndpointName;
if (!string.IsNullOrEmpty(endpointName) && endpointName.StartsWith("Debug_"))
{
}
else
{//Log
}

结论

如果你有更好的实现方式,欢迎到公众号后台留言告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之DrawText详解

如果你经常使用Canvas的draw***方法去绘制一些图像图形&#xff0c;绘制的坐标是从Canvas左上角开始计算的&#xff0c;如果想要把一个图像放到某个位置&#xff0c;直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样&#xff0c;如果你传递进去字符串&#xff0c…

Gruntjs: grunt-contrib-jst

预编译Underscore模板到JST文件&#xff08;Underscore&#xff1a;JS工具库) generate JavaScript template functions Gruntfile的配置实例&#xff1a; 1 module.exports function(grunt) {2 3 grunt.initConfig({4 jst: {5 bulid: {6 …

托马斯反驳牛顿被骂,普朗克颜值过高遭上帝捉弄,狄拉克却因爱情成话痨

全世界只有3.14 % 的人关注了爆炸吧知识今天&#xff0c;小编抑制不住自己&#xff0c;要给大家强烈推荐一个公众号“少年物理学家”&#xff01;少年物理学家是一个致力为学生家长和老师&#xff0c;提供丰富的物理小知识&#xff1a;物理学家、物理趣谈、科技与物理、万物背后…

Android之滑动事件冲突解决 Touch事件处理机制总结

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP 当屏幕…

php 信号量 关闭,php 信号量

一些理论基础&#xff1a;信号量&#xff1a;又称为信号灯、旗语 用来解决进程(线程同步的问题)&#xff0c;类似于一把锁&#xff0c;访问前获取锁(获取不到则等待)&#xff0c;访问后释放锁。临界资源&#xff1a;每次仅允许一个进程访问的资源。临界区&#xff1a;每个进程中…

分享:MetaModel 3.2.5 发布,数据库元模型

MetaModel 3.2.5 发布&#xff0c;数据库元模型 http://www.oschina.net/news/36236/metamodel-3-2-5

CALL FOR DUTY 来和我们一起冒险吧!

我们面临的挑战是什么&#xff1f;昨天发了一篇让大家提问Scott Hanselman的问题&#xff0c;有人调侃 &#xff08;也许是认真的&#xff09;让我问他&#xff1a;“.NET还有救吗&#xff1f;” &#xff0c;我的第一反应不是.NET还有没有救&#xff0c;而是该怎么救问这个问题…

HarmoryOS,API9项目配置

官方配置信息讲解如下&#xff1a;文档中心 1、APP名字图标&#xff1a;在entry模块&#xff0c;module.json5文件中 2、module配置 build-profile.json5文件中 3、包名 app.json5

厉害!他33岁破格晋升教授和博导,成果还打破国外技术垄断

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 长江大学新闻网、长江大学石油工程学院、PaperRSS转自 | 学术资源大全他是人到中年"顺意人生"的代表&#xff0c;29岁晋升副教授、33岁破格晋升教授和博导&#xff1b;他独辟蹊径&#xff0c;将"智能"融入石油…

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

设计模式 ( 十四 ) 迭代器模式Iterator&#xff08;对象行为型&#xff09;1.概述类中的面向对象编程封装应用逻辑。类&#xff0c;就是实例化的对象&#xff0c;每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法&#xff0c;但通常你会处理一组对…

开源网站

开源网站&#xff1a; Code Google 谷歌旗下的一个开源项目托管网站&#xff0c;资源很丰富&#xff0c;文档也很齐全&#xff0c;甚至还有中文文档。 Souceforge 国外一个比较有名的开源网站&#xff0c;很多有名的开源项目都是在这个网站托管的。 Github 也很不错的一个开源网…

Android之Volley 源码解析

原文来自&#xff1a;http://www.codekk.com 1. 功能介绍 1.1. Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。 名字由来&#xff1a;a burst or emission of many things or a large amount at once 发布演讲…

双击打开Inventor文件

为什么80%的码农都做不了架构师&#xff1f;>>> 出现的问题&#xff1a; 正常启动电脑后&#xff0c;我双击桌面上的一个idw文件&#xff0c;默认使用 Inventor 2013 打开该格式的文件&#xff1b;但 Inventor 启动不到一半就弹出了如下的错误窗口&#xff0c;点击…

php long2ip,php 中IPV6 ip2long的问题解决办法

在32位系统&#xff0c;ip2long不能转换IPv6&#xff0c;但您可以转换ip2bin和bin2ip 这个函数转换为IPv4和IPv6&#xff0c;返回false&#xff0c;如果是无效的实例程序 代码如下复制代码function ip2bin($ip){if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ! fa…

phpstrom 编辑器设置

http://www.jb51.net/article/58069.htm 配置sublime主题 保存配置的路径为&#xff1a;将Monokai_Sublime.xml拷贝到C:\Users\Administrator\.WebIde100\config\colors&#xff0c;然后重启phpstrom即可 当主题样式选为暗黑色的时候&#xff0c;选中的代码的背景色也会有点暗…

记一次 .NET 某妇产医院 WPF内存溢出分析

一&#xff1a;背景 1. 讲故事上个月有位朋友通过博客园的短消息找到我&#xff0c;说他的程序存在内存溢出情况&#xff0c;寻求如何解决。要解决还得通过 windbg 分析啦。二&#xff1a;Windbg 分析 1. 为什么会内存溢出大家都知道内存溢出对应着 .NET 中的 OutOfMemonryExce…

16世纪的旷世奇才:大学弃医丛数,仅用20年就独立发明了温度计、军事罗盘、天文望远镜,后半生双目失明还能写出惊人科学著作

全世界只有3.14 % 的人关注了爆炸吧知识传说&#xff0c;在崇尚绝对权威的中世纪里&#xff0c;有这么一位敢于质疑权威的年轻人。在比萨斜塔上做了“两个铁球同时落地”的实验&#xff0c;得出了重量不同的两个铁球同时下落的结论。从此推翻了亚里士多德“物体下落速度和重量成…

禅道项目管理软件介绍

使用流程 一、分享的流程图 二、流程图 维护产品及模块 一、如何来添加产品呢&#xff1f;让我们来看下步骤&#xff1a; 以管理员或者其他有产品管理权限的帐号登录。点击产品视图。在页面右侧&#xff0c;点击“新增产品”&#xff0c;即可出来产品添加页面。&#xff08;第一…

轻松学PHP编程 源代码

http://pan.baidu.com/share/link?shareid170353&uk1191536722 转载于:https://blog.51cto.com/letianwuji/1106854

java jar包 平滑重启,nginx 平滑重启的实现方法

一、背景在服务器开发过程中&#xff0c;难免需要重启服务加载新的代码或配置&#xff0c;如果能够保证server重启的过程中服务不间断&#xff0c;那重启对于业务的影响可以降为0。最近调研了一下nginx平滑重启&#xff0c;觉得很有意思&#xff0c;记录下来供有兴趣的同学查阅…