欢迎来到皮皮网网首页

【webhook源码】【jvm源码jvm启动流程】【android选择图片源码】webapi 源码

来源:相册冲印源码 时间:2024-12-24 04:21:46

1.如何在ASP.NETCore6中使用跟踪监听器
2.详解.NET Model ValidationAttribute的使用

webapi 源码

如何在ASP.NETCore6中使用跟踪监听器

       当使用ASP.NETCore6构建的源码应用程序时,你可能经常想使用跟踪和记录来监控你的源码应用程序的性能和诊断错误。你也可以在生产环境中使用跟踪来衡量你的源码应用程序在运行时的表现。

       这篇文章讨论了我们如何在ASP.NETCore6中使用追踪。源码我们将研究如何使用跟踪监听器来收集跟踪信息,源码并使用ILogger将跟踪输出引导到事件日志中。源码webhook源码

       要使用本文提供的源码代码示例,你的源码系统中应该安装有VisualStudio。如果你还没有副本,源码你可以在这里下载VisualStudio。源码

在VisualStudio中创建一个ASP.NETCoreWebAPI项目

       首先,源码让我们在VisualStudio中创建一个ASP.NETCore项目。源码按照这些步骤将在VisualStudio中创建一个新的源码jvm源码jvm启动流程ASP.NETCore6WebAPI项目。

       启动VisualStudioIDE。源码

       点击"创建新项目"。源码

       在"创建新项目"窗口,从显示的模板列表中选择"ASP.NETCoreWebAPI"。

       点击"下一步"。

       在"配置你的新项目"窗口中,指定新项目的名称和位置。

       根据你的喜好,可以选择勾选"将解决方案和项目放在同一目录下"复选框。

       点击"下一步"。

       在接下来显示的"附加信息"窗口中,确保勾选"使用控制器..."的android选择图片源码复选框,因为我们在这个例子中不会使用最小的API。将"验证类型"保留为"无"(默认)。

       确保"启用Docker"、"为HTTPS配置"和"启用开放API支持"的复选框不被选中,因为我们不会在这里使用任何这些功能。

       点击创建。

       我们将使用这个ASP.NETCore6WebAPI项目,在本文的后续部分使用跟踪监听器。

什么是跟踪?

       与追踪主要事件的事件日志相比,追踪可以更全面地了解运行中的应用程序及其组件。日志由结构化或非结构化的时间戳数据组成,显示了你的vs源码管理环境搭建应用程序中发生的事件的记录。追踪提供了对单个请求以及它如何被处理的更多可见性。

       System.Diagnostics命名空间包含Trace和Debug类。跟踪类在生产环境中使用,而调试类在开发时使用。

       追踪通常包括以下三个阶段。

       工具化。我们编写必要的代码来捕获相关信息

       追踪。我们把跟踪信息写到指定的目标,即事件日志、文本文件、数据库表等。

       分析。c计算器源码我们分析从跟踪中收集到的信息,以确定应用程序中的瓶颈。

什么是跟踪监听器?为什么需要它们?

       跟踪监听器收集跟踪信息,存储它们,并将它们引导到一个适当的目标,如文本文件。.NET提供了几种跟踪监听器,包括以下几种。

       ConsoleTraceListener-将跟踪信息发送到控制台窗口。

       DefaultTraceListener-将跟踪信息发送到标准调试输出。

       DelimitedListTraceListener-将跟踪输出以限定的格式发送到流、流作家或文本作家。

       EventLogTraceListener-发送跟踪信息到事件日志。

       TextWriterTraceListener-发送跟踪信息到一个文本文件。

       XmlWriterTraceListener-将跟踪信息转换为XML。

       System.Diagnostics.Debug和System.Diagnostics.Trace类可以向跟踪监听器发送消息,而监听器又将消息发送到适当的目标。

在ASP.NETCore6中使用配置文件创建一个跟踪监听器

       你可以通过使用配置文件或编写自定义代码来创建一个跟踪监听器。下面显示的代码片断说明了如何使用你的应用程序配置文件创建一个跟踪监听器。

<configuration>

       所有添加到监听器集合中的监听器都会收到跟踪输出。然而,你可以使用一个监听器而不把它添加到监听器集合中。在这种情况下,你在监听器中使用Write或WriteLine方法发送输出。

       下面的代码说明了一个监听器,它没有被添加到监听器集合中,但仍然能够将跟踪信息发送到输出窗口、文件或任何预先配置的输出。

TextWriterTraceListenermyFirstListener=new在ASP.NETCore6中创建一个自定义跟踪监听器

       在大多数情况下,.NET6默认附带的跟踪监听器将满足您的要求。然而,如果你想把你的跟踪信息输出到不同的目的地,你可以实现你自己的跟踪监听器。

       要建立一个自定义的跟踪监听器,你应该创建一个扩展TraceListener抽象类的类。在TraceListener类中有几个虚拟和抽象的方法。你至少应该实现Write和WriteLine方法。至少,你的自定义跟踪监听器应该看起来像这样。

publicclassCustomTraceListener:TraceListener

       所以,你的自定义跟踪监听器类必须有一个参数构造器和Write和WriteLine方法。

       你还需要一个ILogger实例来代表记录器,一个记录器工厂来创建记录器,以及一个StringBuilder来存储跟踪消息,然后再将它们发送到日志目标。

privatereadonlyILoggerFactory_loggerFactory;

       你可以利用依赖注入的优势,在构造函数中注入ILoggerFactory的一个实例,然后使用该实例来创建ILogger的一个实例。

publicCustomTraceListener(ILoggerFactoryloggerFactory)

       这里是Write和WriteLine方法的一个最小实现。

publicoverridevoidWrite(string?message,string?category)ASP.NETCore6中完整的自定义跟踪监听器示例

       下面是我们对自定义跟踪监听器的最小实现的完整源代码,供您参考。

usingSystem.Collections.Concurrent;在Program.cs文件中注册自定义跟踪监听器

       要使用自定义跟踪监听器,你应该使用以下代码在监听器集合中注册它。

varloggerFactory=app.Services.GetRequiredService<ILoggerFactory>();

       因为我们的自定义跟踪监听器已经被添加到监听器集合中,它将捕获所有由运行时产生的跟踪消息,并将输出发送到我们的记录器。它还将发送我们在应用程序中明确发送的任何跟踪消息(就像我们在前面的myFirstListener例子中做的那样)。

       因此,任何添加到监听器集合的监听器都可以捕获由运行时产生的跟踪信息,以及在应用程序中明确发送的任何跟踪信息。然而,如果一个跟踪监听器没有被添加到集合中,它只能发送应用程序中明确发送的跟踪消息。它不会捕获任何由运行时产生的跟踪消息。

       当使用自定义跟踪监听器时,你必须记住关闭或刷新跟踪监听器,以确保输出缓冲区被清空。你可以利用StringBuilderCache类来优化你使用StringBuilder的代码(在CustomTraceListener类)。

详解.NET Model ValidationAttribute的使用

       ä¸€ã€ç®€ä»‹

       ValidationAttribute 验证特性一般用来验证数据的格式,范围,是否必填等,我们通过它的子类特性 Range、Required 等特性可以轻松实现对数据的验证。但是对于一些特殊需要的特性,系统自带的特性局限性很大,我们也可以自定义扩展需要的特性。 ?

二、ASP.NET 应用

       ValidationAttribute 应用在 ASP.NET MVC 中是常用得,用于对 HTPP Request 参数字段得校验,不通过得会返回 提示给调用方。接下通过一个简单例子进行说明一下,例子使用得是 .NET Web API 。

2.1 Model

       é¦–先定义一个 request model 添加一些字段,如 Name 打上 Required、MinLength、MaxLength 这样的标记进行限制

public?class?PersonalRequest{ public?int?Id?{ ?get;?set;?}[Required][MinLength(2),?MaxLength()]public?string?Name?{ ?get;?set;?}public?string?Sex?{ ?get;?set;?}[Required][MinLength(2),?MaxLength()]public?string?Address?{ ?get;?set;?}}2.2 Controller

       å®šä¹‰å®Œ request ?model 后,创建一个 ?API ,将上一步定义的 request model 作为参数。此时在 request ?model 字段上打的 ?Required、MinLength、MaxLength 标记,是没有任何作用的。

[HttpPost][Route("WebAPIApply")]public?IActionResult?WebAPIApply(PersonalRequest?request){ return?Ok();}2.4 Filter

       ä¸ºäº†è®© request ?model 字段上打的 ?Required、MinLength、MaxLength 标记生效, MVC 中需要使用到 Filter 。代码如下

public?class?ModelValidateFilter?:?IAsyncActionFilter{ public?async?Task?OnActionExecutionAsync(ActionExecutingContext?context,?ActionExecutionDelegate?next){ if?(!context.ModelState.IsValid){ var?allErrors?=?context.ModelState.Values.SelectMany(v?=>?v.Errors);var?message?=?string.Join("?|?",?allErrors.Select(e?=>?e.ErrorMessage));context.Result?=?new?JsonResult(new?{ ?results?=?allErrors?});}await?next();}}2.5 注册

       Filter 创建完成后,需要注册一下,这里我们使用全局模式。如下

builder.Services.AddMvc(opt?=>{ opt.Filters.Add(new?ModelValidateFilter());});2.6 验证

       ç¨‹åºåˆ›å»ºå®ŒæˆåŽï¼Œè°ƒç”¨ API 验证一下,如下对 Name 分别赋值了 D Da。 可以看到当是 D 的时候,字段长度为 1 ,filter 对 request ?model 进行了正确的校验

三、直接验证实例

       ç›´æŽ¥éªŒè¯å®žä¾‹ï¼Œæ˜¯æŒ‡å¯ä»¥å¯¹å®šä¹‰ model 的实例,自定义代码对齐进行校验,这种使用起来相对灵活,但也不经常使用。接下通过一个简单例子进行说明一下

3.1 Model

       é¦–先定义一个 model 添加一些字段,如 Name 打上 Required、MinLength、MaxLength 这样的标记进行限制

public?class?Personal{ [Required]public?int?ID?{ ?get;?set;?}[Required][MinLength(2),?MaxLength(5)]public?string?Name?{ ?get;?set;?}}3.2 Validation Code

       æ ¡éªŒä»£ç å¦‚下,先对定义的 model 进行了实例化,然后使用 Validator.TryValidateObject 方法进行校验,实际工作中需要自己进行一些封装。关键代码如下:

Personal?personal?=?new?Personal();//?personal.Name?=?"D";ValidationContext?validationContext?=?new?ValidationContext(personal);List<ValidationResult>?results?=?new?List<ValidationResult>();bool?isValid?=?Validator.TryValidateObject(personal,?validationContext,?results,?true);3.3 验证

       ä»£ç å†™å®ŒåŽï¼Œè°ƒç”¨ API 验证一下。首先直接调用,应为代码里面没有对 Personal 实例赋值,正确的进行了 Required 标记的校验可以修改下代码 ?personal.Name = "Da",然后启动程序,调用一下 API 可以看到校验是通过的可以修改下代码 ?personal.Name = "D",然后启动程序,调用一下 API 可以看到校验是不通过的,因为长度为 1 没有满足 MinLength(2)

四、自定义 ValidationAttribute

       é™¤äº†å¯ä»¥ä½¿ç”¨ Microsoft 提供的 ValidationAttribute ,我们还可以使用自定义的 ValidationAttribute ,微软这方面提供了可扩展性。自定义的 ValidationAttribute 只需继承 ValidationAttribute,重写 IsValid 、FormatErrorMessage 即可。使用方面与 Microsoft 提供的 ValidationAttribute 使用一模一样。如下代码

public?class?CanToIntAttribute?:?ValidationAttribute{ ///?<summary>///?IsValid?为?false?时,提示得?error?信息///?</summary>///?<param?name="name"></param>///?<returns></returns>public?override?string?FormatErrorMessage(string?name){ return?$"{ name}?need?to?int";}///?<summary>///?验证当前字段得结果///?</summary>///?<param?name="value"></param>///?<returns></returns>public?override?bool?IsValid(object?value){ int?num?=?0;return?int.TryParse(Convert.ToString(value),?out?num);}}public?class?PersonalRequest{ public?int?Id?{ ?get;?set;?}public?string?Name?{ ?get;?set;?}[CanToInt]public?string?Sex?{ ?get;?set;?}[Required][MinLength(2),?MaxLength()]public?string?Address?{ ?get;?set;?}}五、源码

       /post/