asp .net core6

目录

1、 Program.cs

2、请求

2.1 FromService

2.2 FromBody

2.3 FromForm

2.4 FromHeader

2.5 FromQuery

3、返回结果

3.1 返回指定类型

3.2 返回IActionResult实例

3.3 返回泛型

3.3.1 建议返回类型

4、日志记录

4.1 log4net日志记录

4.2 log4net数据库日志

4.3 NLog日志记录--推荐

4.4 NLog数据库日志

5、Core WebApI-Filter

5.1 什么是AOP?

5.2 Core WebApi中AOP支持有那些

5.3 ResourceFilter扩展定制

5.4 ResourceFilter扩展缓存

5.5 ActionFilter扩展

5.6 ActionFilter场景应用

5.7 Exception扩展

5.8 Filter的生效范围和依赖注入

5.9 Filter的生效范围和依赖注入

5.10 TypeFilter和ServiceFilter解读


1、 Program.cs

// 声明builder
var builder = WebApplication.CreateBuilder(args);

// 注册抽象和具体实现之间的关系(两个不同的项目相互调用)

builder.Services.AddTransient<Iservice,Serviceimp>();

// 解决中文乱码问题
builder.Services
       .AddControllers(option =>
        {
            // 全局注册 需要实现IExceptionFilter
            option.Filters.Add<CustomExceptionFilterAttribute>();
            option.Conventions.Insert(0, new RouteConvention(new RouteAttribute("api/")))
        })
       .AddJsonOptions(options =>
            options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);

//注册NLog
    builder.Logging.ClearProviders();
    builder.Host.UseNLog();

//构建
var app = builder.Build();

app.UseAuthorization();

app.Run();

2、请求

2.1 FromService

表示来自IOC容器创建

必然需要IOC容器先注册

如果没有标记【FromService】,默认会认定这个参数是通过调用方传递

标记【FromService】不需要传递参数,由IOC容器提供

[HttpGet() ]

public string FormServiceMethod([FromService] IServiceA _ITServiceA)

{

        

}

2.2 FromBody

从HTTP Body中去搜索这个参数的数据,通常用于取JSON,XML

Get请求 -- 不能访问

请求API,客服端携带的参数为JSON格式,content-type:application/json

2.3 FromForm

Form表单传参

Get请求 -- 不能访问

2.4 FromHeader

Header头信息中收集这个参数的数据,如果客户端通过查询字符串方式传递参数,就是在url地址中去获取值

2.5 FromQuery

URL Query收集这个参数的数据

3、返回结果

3.1 返回指定类型

返回指定类型,如果是对象、int,默认返回JSON格式--经过序列化处理的。

如果是字符串,直接返回字符串;

3.2 返回IActionResult实例

只要是实现了IActionResult接口的,都可以做为返回值

--返回JSON

new JsonResult (object?)

--返回值可以写成

ActionResult<ApiResult<Student>>

3.3 返回泛型

3.3.1 建议返回类型

固定格式

public class ApiResult<T> where T : class

{

        /// <summary>

        /// Api执行成功

        /// </summary>

        public bool Success { get; set }



        /// <summary>

        /// 错误信息

        /// </summary>

        public string? Message { get; set }



        /// <summary>

        /// 结果集

        /// </summary>

        public T? Data { get; set }

}

4、日志记录

需要日志信息持久化,保存在文件中,保存到数据库中

4.1 log4net日志记录

1、Nuget引入程序包log4net + Microsoft.Extensions.Logging.Log4Net.AspNetCore

2、准备配置文件【右击属性,设置为始终复制

3、植入log4net

builder.Logging.AddLog4Net(“CfgFile/log4net.config”)

4、通过构造函数注入

private readonly ILogger<UserController> _logger;

public UserController(ILogger<UserController> logger)
{
        _logger = logger;
}

4.2 log4net数据库日志

要支持数据库日志,日志信息写入到数据库中保存;

1、修改配置文件,支持数据库

2、nuget引入:写入数据库需要的程序集

3、执行初始化数据库脚本

4.3 NLog日志记录--推荐

1、nuget引入:NLog.web.AspNetCore

2、准备配置文件

3、读取配置文件,植入Nlog.config

//读取配置文件

var logger = NLog.LogManager.Setup().

                        LoadConfigurationFromAppSettings().GetCurrentClassLogger();

//NLog配置

builder.Logging.ClearProviders(); // 不在系统日志中输出

builder.Host.UseNLog();

4.4 NLog数据库日志

要支持数据库日志,日志信息写入到数据库中保存;

 1、修改配置文件,支持数据库

2、nuget引入:写入数据库需要的程序集

3、执行初始化数据库脚本

5、Core WebApI-Filter

5.1 什么是AOP?

AOP,面向切面编程,可以在不破坏之前的封装为基础动态增加一些功能。

5.2 Core WebApi中AOP支持有那些

授权--Authorize

资源--Resource

异常--Exception

方法前后--Action

AlwayRunResult

结果前后--Result

5.3 ResourceFilter扩展定制

1、定义类、实现IResourceFilter/IAsynIResourceFilter接口,继承Attribute父类

2、实现方法

3、标记在API方法上

注意:框架提供的接口,抽象类是不能直接使用的,需要扩展

接口:实现接口,实现方法,把实现类植入;

抽象类:自定义类来继承抽象类,重写方法,把实现类注入;

/Utility/Filters/CustomResourceFilterAttribute

// 自定义ResourceFilter

public class CustomResourceFilterAttribute : Attribute, IResourceFilter

{

        // 在API执行之后

        public void OnResourceExecuted(ResourceExecutedContext context)

        {

        }

       

        // 在API执行之前

        public void OnResourceExecuting(ResourceExecutingContext context)

        {

        }       

}

// 自定义AsyncResourceFilter

public class CustomAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter

{

        public async Task OnResourceExecutingAsync(ResourceExecutingContext context)

        {

                // API执行之前

                await next.Invoke();

                //API执行之后

        }

}



// API控制层

// 可以省略Attribute

[CustomResourceFilter]

public void GetUser()

{

}

5.4 ResourceFilter扩展缓存

ResourceFilter天生是为了缓存

缓存:如果缓存区域中的值没有变化,且key不变的,获取的值就应该是之前的值;

// 缓存区域

private static Dictionary<string, object> CacheDictionary = new Dictionary<string, object>();

// 在API执行之后

public void OnResourceExecuted(ResourceExecutedContext context)

{

        //保存在缓存中

        string key = context.HttpContext.Request.Path

        CacheDictionary[key]

}

       

// 在API执行之前

public void OnResourceExecuting(ResourceExecutingContext context)

{

        // 检查缓存,如果有就直接返回(不执行api控制器)

        string key = context.HttpContext.Request.Path //Url地址

        if (CacheDictionary.ContainsKey(key))

        {

                object oResult    = CacheDictionary[key];

                IActionResult result = oResult as IActionResult;

                context.Result = result; //请求处理过程中短路器,如果Result赋值了,就不继续执行,如果没有赋值,为null就继续往后执行;

        }    

}       

5.5 ActionFilter扩展

特点:

和ResourceFilter比较

ResourceFilter使用两个方法包裹了控制器的构造实例+API执行;

ActionFilter使用两个办法只包裹了API逻辑,不包括控制器构造函数

5.6 ActionFilter场景应用

ActionFilter适合什么场景

1、扩展缓存

注意:ResourceFilter更适合做缓存

2、日志记录

API执行结束后,执行结果都是ActionFilter最先获得

5.7 Exception扩展

1、定义类,实现IexceptionFilter/IAsyncExceptionFilter接口

2、实现方法

3、标记在API方法上

发生异常就会触发扩展类中的实现方法;

/// <summary>
/// 异常处理
/// </summary>
public class CustomExceptionFilterAttribute : Attribute, IExceptionFilter
{
    /// <summary>
    /// 当有异常发生的时候,触发这个方法
    /// </summary>
    public void OnException(ExceptionContext context)
    {
        // 处理异常
        if(context.ExceptionHandled==false)//如果没有被处理
        {
            context.Result = new JsonResult(new ApiResult<object>()
            {
                Success=false,
                Message=context.Exception.Message//异常消息
            });
            //异常已经处理过了
            context.ExceptionHandled = true;
        }
    }   
}

/// <summary>
/// 异步异常处理
/// </summary>
public class CustomAsyncExceptionFilterAttribute : Attribute, IAsyncExceptionFilter
{
    /// <summary>
    /// 当有异常发生的时候,触发这个方法
    /// </summary>
    public async Task OnException(ExceptionContext context)
    {
        // 处理异常
        if(context.ExceptionHandled==false)//如果没有被处理
        {
            context.Result = new JsonResult(new ApiResult<object>()
            {
                Success=false,
                Message=context.Exception.Message//异常消息
            });
            //异常已经处理过了
            context.ExceptionHandled = true;
        }
        //返回已经完成的Task对象,单线程同步执行的
        await Task.CompletedTask;
    }   
}

API控制台标记
[CustomExceptionFilter]  [CustomAsyncExceptionFilter]

5.8 Filter的生效范围和依赖注入

前面的Filter都是标记在方法上,如果大批量的生效怎么办呢?

1、当前方法生效

2、控制器下所有方法生效

3、全局生效

5.9 Filter的生效范围和依赖注入

大批量生效办法:

1、方法注册--当前方法生效

2、控制器注册--控制器生效

3、全局注册

写在builder.Services.AddControllers中

5.10 TypeFilter和ServiceFilter解读

控制器或者方法上输入

[TypeFilter(typeof(CustomAsyncExceptionFilterAttribute))]

[ServiceFilter(typeof(CustomAsyncExceptionFilterAttribute))] //需要在IOC容器中注入

为了支持ServiceFilter

builder.Services.AddTransient<CustomAsyncExceptionFilterAttribute>();

6 鉴权授权

6.1 授权核心价值

1、保证数据安全,让不同的人做各自的事,管理更便捷

2、保证系统安全

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core是微软推出的一种全新的跨平台开发框架,而ASP.NET Core 6则是最新的版本。在ASP.NET Core 6中,对于PDF文件的处理提供了更加便捷和灵活的方式。 ASP.NET Core 6中可以使用第三方库来生成和处理PDF文件。常见的有iTextSharp、PDFSharp、Syncfusion等。这些库提供了丰富的API和功能,可以通过代码生成和编辑PDF文件。例如,可以设置PDF的样式、布局、文本内容、表格、图片等。同时,还可以实现PDF的导出、打印、加密等操作。 除了使用第三方库外,ASP.NET Core 6还提供了一些原生的功能来处理PDF文件。例如,可以使用Razor视图引擎生成动态的PDF文件,将视图转化为PDF格式输出。使用这种方式,可以直接在视图中使用HTML和CSS来定义PDF的样式和布局,非常方便。此外,还可以通过.NET内置的Web API来生成PDF文件,并通过HTTP请求将PDF文件发送给客户端。 ASP.NET Core 6中的PDF处理还提供了一些额外的功能,如文本搜索、书签、目录生成、水印、添加标记等。这些功能使得生成的PDF文件更加丰富和多样化。同时,ASP.NET Core 6还支持将PDF文件与其他文件格式进行转换,如将PDF转成Word、Excel、HTML等格式,方便用户的使用和转载。 总而言之,ASP.NET Core 6提供了多种方法和工具来处理PDF文件,使得开发人员可以更加方便地生成和编辑PDF文件,并实现各种复杂的需求。无论是使用第三方库还是原生的功能,都能够满足开发人员对于PDF处理的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值