美文网首页
C# Web API

C# Web API

作者: YY323 | 来源:发表于2024-06-19 09:09 被阅读0次

Swagger中测试Get和Post请求

  1. 如果请求方法中有参数:
    • Get请求:必须加模板 [HttpGet(template:”{index}”)]
    • Post请求:可(不)加模板
  2. 加入到模板中参数,在测试时必填该参数;对于未加入到模板中的参数,测试时可(不)填该参数
  3. 出现在模板上的参数,在url中的表现为url/{index}即url/2;未出现在模板上的参数,在url中的表现为url?index=2


Get

获取资源,安全,幂等(发送相同的数据会得到相同的数据) 标记可能出现的状态码 如果没有加ProducesResponseType,就会出现Undocumented;加了后只出现状态码 返回值

Post

创建资源,不安全(修改服务器资源),非幂等(发送Post请求多次结果不一样) 201

Put

更新特定资源,不安全(修改服务器资源),幂等;如果只更新某一个字段,也会将所有字段的内容发送到服务器 无返回内容时用NoContent(204)

Delete

删除,不安全(修改服务器资源),幂等

Patch

对特定资源进行部分更新,不安全(修改服务器资源),幂等;如果只更新某一个字段,只会发送要更改字段的内容到服务器

HEAD

与Get相同,但不返回Body数据,安全,幂等

Options

获取特定资源所支持的操作,安全,幂等

验证字段

  1. 使用自带验证
  • Remote的使用:注册的时候用于验证email或者手机号是否已被注册
  1. 手动验证字段

    方式一:直接增加一个modelState的错误信息
    方式二:用自定义Attribute

Accept类型

可json 可xml


格式不统一时报错的设置 增加对xml的支持,如果未增加也未设置报错,则默认返回json格式

依赖注入

依赖注入对象 提供依赖注入的三种方式
  1. Singleton


    方式一:Singleton
  2. Scoped:1个请求产生 1个,n个请求产生n个
  3. Transient 请求1 请求2 区别

内置日志记录器

四种日志记录器:前两种不需要额外的配置

  • Console
  • Debug
  • EventSource
  • EventLog : Windows Only
    当执行var builder = WebApplication.CreateBuilder(args)这句时,所有内置记录器就会添加到我们的App中,不需要依赖注入的绑定;想要限制指定的内置记录器,使用builder.Logging.ClearProviders()先清除记录器的生成器,这样就会将四种内置的记录器全部移除,然后再Add _logger.LogInformation(...)
    _logger.LogWarning(...)
    _logger.LogError(...)
    日志的级别 可以在appsettings.json文件中配置日志级别 更多配置
  • Console的日志记录来自Microsoft.Hosting模块的配置
  • Debug的日志记录来自Microsoft.AspNetCore模块的配置,未配置该模块则采用Default配置的级别

使用Serilog(第三方)

记录日志到文件

  1. 安装Serilog.AspNetCore到程序中;如果向使用Serilog到控制台,可以安装Serilog.Sinks.File
  2. 使用

使用Log4Net

  1. 安装Log4Net
  2. 使用
builder.Logging.AddLog4Net(); // Program.cs
  1. 新增一个名为log4net.config的配置文件Web Configuration File
<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <appender name="DefaultDebugAppender" type="log4net.Appender.DebugAppender"> <!-- Debug调试窗口 -->
        <layout type="log4net.Layout.PatternLayout"> 
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>

    <!-- 日志的等级,它们由高到底分别为: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
    <!--信息日志配置-->
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
        <file value="Logs\Info\info.log" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!-- 锁定模式,防止多线程时不能写log -->
        <appendToFile value="true" />
        <maximumFileSize value="100MB" />   <!-- 最大文件大小 不设置默认10MB -->
        <maxSizeRollBackups value="100" />  <!-- 最大备份文件数 -->
        <preserveLogFileNameExtension value="true" />
        <staticLogFileName value="false" />  <!-- 日志文件名由file中定义的文件名和日期组成,如info20240619.log -->
        <datePattern value="yyyyMMdd" />
        <rollingStyle value="Composite" /> <!--滚动方式: Once:按启动次数滚动,Size:按文件大小滚动 Date:按日期滚动 Composite:按大小和日期的组合滚动 -->
        <layout type="log4net.Layout.PatternLayout">
            <!--<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />-->
            <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />   <!-- 设置过滤器的最小日志级别 -->
            <levelMax value="INFO" />   <!-- 设置过滤器的最大日志级别 -->
        </filter>
    </appender>

    <!--调试日志配置-->
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
        <file value="Logs\Debug\debug.log" />
        <appendToFile value="true" />
        <maximumFileSize value="100MB" />
        <maxSizeRollBackups value="100" />
        <preserveLogFileNameExtension value="true" />
        <staticLogFileName value="false" />
        <datePattern value="yyyyMMdd" />
        <rollingStyle value="Composite" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="DEBUG" />
            <levelMax value="DEBUG" />
        </filter>
    </appender>

    <!--错误日志配置-->
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
        <File value="Logs\Error\error.log" />
        <appendToFile value="true" />
        <maximumFileSize value="100MB" />
        <maxSizeRollBackups value="100" />
        <preserveLogFileNameExtension value="true" />
        <staticLogFileName value="false" />
        <datePattern value="yyyyMMdd" />
        <rollingStyle value="Composite" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="ERROR" />
        </filter>
    </appender>
    
    <!-- 数据库日志-->
    <appennder name="AdoDBAppender" type="log4net.Appender.AdoNetAppender">
        <buffersize value="0" /> <!-- 日志缓存写入条数 为0时表示只要有一条就立刻写入到数据库 -->
        <connectionType value="System.Data.Mysql.MySqlConnection" />
        <connectionString value="Data Source=127.0.0.1;Port=3306;Database=log4net;Uid=root;Pwd=root;CharSet=utf8;" />
        <commandText value="INSERT INTO Log4Net (log_time,log_type,log_level,log_message,log_exception) VALUES(?,?,?,?,?)" />
        <parameter>
            <parameterName value="@log_time" />
            <dbType value="DateTime" />
            <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
            <parameterName value="@log_type" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@log_level" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@log_message" />
            <dbType value="String" />
            <size value="4000" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@log_exception" />
            <dbType value="String" />
            <size value="2000" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%exception" />
            </layout>
        </parameter>
    </appennder>
    
    <root>
        <level value="ALL" />  <!-- 记录日志的级别 -->
        <appender-ref ref="DefaultDebugAppender" /> <!-- 调用DebugAppender --> 
        <appender-ref ref="InfoAppender" />  <!-- 调用InfoAppender --> 
        <appender-ref ref="DebugAppender" />  <!-- 调用InfoAppender --> 
        <appender-ref ref="ErrorAppender" />  <!-- 调用InfoAppender --> 
    </root>
</l
增加记录到控制台
增加记录到文件 其中的rollingStyle必须配置
增加记录到文件必配的滚动方式
当为rollingStyle = Once是无需其它属性,当rollingStyle = Size时, 修改后不更新到bin文件夹下的config文件中的解决办法
  1. 清除内置日志记录器

相关文章

网友评论

      本文标题:C# Web API

      本文链接:https://www.haomeiwen.com/subject/btmyqjtx.html