详解Asp.Net Core管道模型中的五种过滤器的适用场景与用法

news2024/9/25 1:22:38

在这里插入图片描述

1. 前言

在 ASP.NET Core 中,过滤器是一种用于对请求管道进行前置或后置处理的组件。它们可以在请求处理的不同阶段干预和修改请求和响应,以实现一些通用的处理逻辑或功能增强。

ASP.NET Core 的管道模型由多个中间件组成,而过滤器是这个模型中的一部分。它们可以在中间件之前或之后执行,并且可以应用于整个应用程序、控制器、动作方法或特定的路由。过滤器可以用于多种场景,例如添加身份验证、授权、缓存、异常处理等。本文我将介绍 .NET Core 中常用的几种 过滤器。在这里插入图片描述

2. 工作原理

在这里插入图片描述
ASP.NET Core 的过滤器提供了一种灵活和可扩展的方式来实现通用的处理逻辑和功能增强。可以根据具体的需求自定义过滤器,并将它们应用到不同的组件上,以实现各种功能,如身份验证、授权、输入验证、结果缓存等。过滤器的执行顺序和中断逻辑可以根据配置进行调整,以满足特定的业务需求。

ASP.NET Core 的过滤器工作原理如下:

  1. 注册过滤器:您需要在应用程序中注册过滤器。可以通过特性(Attribute)或全局配置的方式将过滤器应用到控制器、动作方法或整个应用程序。

  2. 确定过滤器顺序:如果存在多个过滤器,它们将按照注册的顺序进行执行。您可以使用特性或全局配置来指定过滤器的顺序。

  3. 请求管道处理:当应用程序接收到请求时,请求管道开始处理。在过滤器被应用之前,中间件会处理一些通用的任务,如路由解析、身份验证等。

  4. 过滤器执行(前置和后置):过滤器分为前置过滤器(Before Filters)和后置过滤器(After Filters)两种类型。

    • 前置过滤器:前置过滤器在请求被处理之前执行,可以对请求进行修改或干预。例如,身份验证过滤器可以检查用户是否已经登录,授权过滤器可以验证用户是否有足够的权限访问资源。
    • 后置过滤器:后置过滤器在请求处理完成后执行,可以对响应进行修改或处理。例如,结果过滤器可以对响应进行缓存、日志记录或异常处理。
  5. 过滤器链:过滤器可以链接在一起形成一个过滤器链。在过滤器链中,每个过滤器都可以选择继续执行下一个过滤器或中断请求处理。

    • 对于前置过滤器,如果某个过滤器中断请求处理,则后续的过滤器将不会执行,并且请求将不会进入控制器的动作方法。
    • 对于后置过滤器,即使某个过滤器中断了请求处理,其他后置过滤器仍然会执行,并且响应会被传递回客户端。
  6. 结果处理:当请求通过过滤器链并且控制器的动作方法被执行后,结果将返回到过滤器链的后置过滤器。后置过滤器可以对结果进行修改或处理,然后将最终的响应返回给客户端。

  7. 请求管道结束:请求处理完成后,响应将发送回客户端,请求管道结束。
    在这里插入图片描述

3. 五种过滤器

在这里插入图片描述

1. Authorization Filter 授权过滤器

授权过滤器(Authorization Filter)是一种在请求处理管道中用于授权的组件。它可以用于保护整个控制器或单个操作方法,以确保只有已经通过认证和授权的用户才能够访问受保护的资源。授权过滤器通常用于验证用户是否具有访问资源的权限,并根据验证结果决定是否允许继续执行请求。

在 Asp.Net Core 中,授权过滤器可以通过实现 IAuthorizationFilter 接口来创建。该接口定义了一个 OnAuthorization 方法,该方法会在授权过程中被调用。在 OnAuthorization 方法中,可以编写自定义的授权逻辑,例如检查用户的角色、权限等信息,并根据验证结果决定是否允许继续执行请求。

适用场景

授权过滤器适用于需要对资源进行访问控制的场景。以下是一些适合使用授权过滤器的常见场景:

  • 身份验证和登录:授权过滤器可以用于验证用户是否已经通过身份验证,并且只有已登录的用户才能够访问受保护的资源。
  • 用户角色和权限管理:授权过滤器可以用于检查用户所属的角色或权限,以决定是否允许用户访问某些特定的功能或资源。
  • 访问级别控制:授权过滤器可以根据用户的访问级别(如管理员、普通用户等)来限制对某些敏感操作或敏感数据的访问。
  • API 接口访问控制:对于 Web API,授权过滤器可以用于验证调用 API 的客户端身份,并基于验证结果决定是否允许客户端访问 API 中的资源。
  • 多租户应用程序:对于分布式或多租户的应用程序,授权过滤器可以用于验证用户所属的租户,并根据租户的许可或设置限制用户对资源的访问。

需要注意的是,授权过滤器只是整个授权机制的一部分。它通常与身份验证机制(如 Cookie、JWT 等)和角色/权限管理系统配合使用,以实现完整的资源访问控制。

代码示例

下面是一个简单的授权过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;

public class MyAuthorizationFilter : IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // 在这里进行授权逻辑的处理
        if (!context.HttpContext.User.Identity.IsAuthenticated)
        {
            // 如果未通过认证,则重定向到登录页面
            context.Result = new RedirectToActionResult("Login", "Account", null);
        }
        
        // 如果要进行更详细的授权验证,可以使用以下方式:
        /*
        if (!CheckUserPermissions(context.HttpContext.User))
        {
            // 如果未通过授权验证,则返回自定义的错误页面或错误信息
            context.Result = new ViewResult
            {
                ViewName = "Error",
                ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    Model = "您没有访问该资源的权限"
                }
            };
        }
        */
    }
}

在上述示例中,我们创建了一个名为 MyAuthorizationFilter 的授权过滤器,并实现了 IAuthorizationFilter 接口。在 OnAuthorization 方法中,我们首先检查用户是否已经通过认证。如果用户未通过认证,我们将其重定向到登录页面。如果想进行更详细的授权验证,可以编写自定义的验证逻辑,并根据验证结果决定是否允许继续执行请求。
要使用该授权过滤器,可以将其应用于整个控制器或单个操作方法。例如,在控制器类上使用 [TypeFilter(typeof(MyAuthorizationFilter))] 特性,或者在操作方法上使用 [ServiceFilter(typeof(MyAuthorizationFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发授权过滤器的逻辑。

2. Action Filter 操作过滤器

操作过滤器(Action Filter)是 ASP.NET Core 中的一种过滤器类型,用于在控制器操作方法的执行前后,以及结果返回前后进行拦截和处理。操作过滤器提供了一种在请求处理管道中对操作方法进行预处理和后处理的机制,可以用于实现一些通用的功能,如日志记录、异常处理、性能计时等。

ASP.NET Core 提供了多个内置的操作过滤器接口,包括:

  • IActionFilter:定义了 BeforeAction 和 AfterAction 方法,用于在操作方法执行前后进行拦截和处理。
  • IResultFilter:定义了 BeforeResult 和 AfterResult 方法,用于在结果返回前后进行拦截和处理。
  • IAsyncActionFilter:与 IActionFilter 类似,但支持异步操作方法。
  • IAsyncResultFilter:与 IResultFilter 类似,但支持异步结果。
适用场景

操作过滤器适用于许多不同的场景,以下是几个常见的使用场景:

  • 认证和授权:操作过滤器可以用于进行身份验证和权限检查。通过在操作过滤器中实现适当的逻辑,您可以在操作方法执行之前拦截请求并验证用户的身份或权限。这样可以确保只有经过授权的用户才能访问受保护的操作。
  • 日志记录和审计:操作过滤器可以用于记录请求和响应的详细日志信息。通过在操作过滤器中添加日志记录逻辑,您可以在操作方法执行前后记录请求的相关信息,如请求路径、请求参数、执行时间等。这有助于对系统进行故障排查、性能优化和安全审计。
  • 异常处理:操作过滤器可以用于处理操作方法抛出的异常。通过在操作过滤器中捕获和处理异常,您可以选择性地修改操作结果或返回自定义的错误页面。这样可以改善用户体验,并提供更加友好的错误信息。
    缓存和性能优化:操作过滤器可以用于缓存操作结果以提高性能。通过在操作过滤器中检查缓存并根据缓存策略- 返回结果,可以避免重复执行相同的操作。这对于频繁访问的操作或需要长时间计算的操作特别有用。
  • 数据转换和格式化:操作过滤器可以用于对请求和响应数据进行转换和格式化。通过在操作过滤器中修改请求参数或对响应进行格式化,您可以将数据从一种格式转换为另一种格式,以满足特定的需求。
代码示例

可以根据需求选择合适的接口来实现操作过滤器。下面是一个简单的操作过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;

public class MyActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        // 在操作方法执行前进行拦截和处理
        Console.WriteLine("Before Action");

        // 如果需要检查某些条件,可以在此处进行判断
        /*
        if (!CheckAuthorization())
        {
            // 如果未通过授权验证,则可以中断操作方法的执行
            context.Result = new UnauthorizedResult();
            return;
        }
        */
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // 在操作方法执行后进行拦截和处理
        Console.WriteLine("After Action");

        // 可以在此处对操作结果进行修改或添加额外的处理逻辑
        /*
        if (context.Exception != null)
        {
            // 如果操作方法抛出了异常,可以在此处进行异常处理
            context.Result = new ViewResult
            {
                ViewName = "Error",
                ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    Model = context.Exception.Message
                }
            };
            context.ExceptionHandled = true;
        }
        */
    }
}

在上述示例中,我们创建了一个名为 MyActionFilter 的操作过滤器,并实现了 IActionFilter 接口。在 OnActionExecuting 方法中,我们可以在操作方法执行之前进行一些拦截和处理的逻辑。例如,在这里可以进行身份验证、权限检查等操作。在 OnActionExecuted 方法中,我们可以在操作方法执行后进行一些拦截和处理的逻辑。例如,在这里可以对操作结果进行修改、异常处理等。

要使用该操作过滤器,可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyActionFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发操作过滤器的逻辑。

3. Result Filter 结果过滤器

结果过滤器(Result Filter)是 ASP.NET Core 中的一种过滤器类型,用于在控制器操作方法执行完毕后,对操作结果进行拦截和处理。结果过滤器提供了一种在请求处理管道中对操作结果进行预处理和后处理的机制,可以用于实现一些通用的功能,如日志记录、数据转换、缓存等。

ASP.NET Core 提供了多个内置的结果过滤器接口,包括:

  • IResultFilter:定义了 BeforeResult 和 AfterResult 方法,用于在结果返回前后进行拦截和处理。
  • IAsyncResultFilter:与 IResultFilter 类似,但支持异步结果。
适用场景

结果过滤器适用于许多不同的场景,以下是一些常见的使用场景:

  • 日志记录和审计:结果过滤器可以用于记录请求的操作结果和相关信息。通过在结果过滤器中添加日志记录逻辑,您可以在操作结果返回前后记录详细的日志信息,如请求路径、响应状态码、执行时间等。这有助于对系统进行故障排查、性能优化和安全审计。
  • 数据转换和格式化:结果过滤器可以用于对操作结果进行转换和格式化。通过在结果过滤器中修改操作结果或对其进行格式化,您可以将数据从一种格式转换为另一种格式,以满足特定的需求。例如,您可以将操作结果转换为 JSON 或 XML 格式,或者对结果进行加密或解密等处理。
  • 缓存和性能优化:结果过滤器可以用于缓存操作结果以提高性能。通过在结果过滤器中检查缓存并根据缓存策略返回结果,可以避免重复执行相同的操作。这对于频繁访问的操作或需要长时间计算的操作特别有用。
  • 统一错误处理:结果过滤器可以用于处理操作结果中的异常情况。通过在结果过滤器中捕获和处理异常,您可以选择性地修改操作结果或返回自定义的错误页面。这样可以改善用户体验,并提供更加友好和一致的错误信息。
  • 控制权限和访问控制:结果过滤器可以用于对操作结果进行权限验证和访问控制。通过在结果过滤器中检查用户的身份和权限,您可以决定是否允许访问操作结果,或者对结果进行相应的修改。这有助于实现细粒度的访问控制和安全性要求。
代码示例

可以根据需求选择合适的接口来实现结果过滤器。下面是一个简单的结果过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;

public class MyResultFilter : IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext context)
    {
        // 在结果返回前进行拦截和处理
        Console.WriteLine("Before Result");

        // 可以在此处对操作结果进行修改或添加额外的处理逻辑
        /*
        if (context.Result is ViewResult viewResult)
        {
            viewResult.ViewData["Message"] = "Hello, World!";
        }
        */
    }

    public void OnResultExecuted(ResultExecutedContext context)
    {
        // 在结果返回后进行拦截和处理
        Console.WriteLine("After Result");

        // 可以在此处对操作结果进行修改或添加额外的处理逻辑
        /*
        if (context.Exception != null)
        {
            // 如果操作方法抛出了异常,可以在此处进行异常处理
            context.Result = new ViewResult
            {
                ViewName = "Error",
                ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    Model = context.Exception.Message
                }
            };
            context.ExceptionHandled = true;
        }
        */
    }
}

在上述示例中,我们创建了一个名为 MyResultFilter 的结果过滤器,并实现了 IResultFilter 接口。在 OnResultExecuting 方法中,我们可以在结果返回之前进行一些拦截和处理的逻辑。例如,在这里可以对结果进行修改、添加额外的数据等。在 OnResultExecuted 方法中,我们可以在结果返回之后进行一些拦截和处理的逻辑。例如,在这里可以对结果进行编辑、异常处理等。

要使用该结果过滤器,您可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyResultFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发结果过滤器的逻辑。

4. Exception Filter 异常过滤器

异常过滤器(Exception Filter)是 ASP.NET Core 中一种用于处理异常的过滤器类型。异常过滤器提供了一种在请求处理管道中对发生的异常进行拦截、处理和转换的机制,以便于统一错误处理和异常日志记录。

ASP.NET Core 提供了多个内置的异常过滤器接口,包括:

  • IExceptionFilter:定义了 OnException 方法,用于在发生异常时进行拦截和处理。
  • IAsyncExceptionFilter:与 IExceptionFilter 类似,但支持异步操作。
适用场景

异常过滤器适用于许多不同的场景,以下是一些常见的使用场景:

  • 统一错误处理:异常过滤器可以用于捕获和处理应用程序中发生的异常。通过在异常过滤器中定义统一的错误处理逻辑,您可以将异常转换为合适的错误响应,以提供更友好和一致的用户体验。例如,您可以返回自定义的错误页面或 JSON 格式的错误信息。
  • 异常日志记录:异常过滤器可以用于记录应用程序中发生的异常。通过在异常过滤器中添加日志记录逻辑,您可以将异常信息记录到日志文件或其他日志存储系统中,以便后续的故障排查和分析。这有助于快速定位和解决应用程序中的问题。
  • 异常转换和处理:异常过滤器可以用于对异常进行转换和处理。通过在异常过滤器中捕获异常并根据需求进行处理,您可以根据具体的业务逻辑将异常转换为不同的结果或执行特定的操作。例如,您可以将某些特定类型的异常转换为特定的错误代码或执行特定的补救操作。
  • 异常监视和报警:异常过滤器可以用于监视应用程序中的异常情况,并触发相应的报警机制。通过在异常过滤器中检测和统计异常出现的频率和数量,您可以及时获得应用程序的异常状态,并通知相关人员或系统进行处理。这有助于保证应用程序的稳定性和可靠性。
  • 异常处理优先级控制:异常过滤器可以用于控制异常处理的优先级和顺序。通过在异常过滤器中定义多个过滤器,并按照优先级顺序进行注册,您可以灵活地控制异常处理逻辑的执行顺序。这对于不同类型的异常需要不同的处理方式或特定的处理顺序时非常有用。
代码示例

以下是一个简单的异常过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;

public class MyExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        // 在发生异常时进行拦截和处理

        // 可以在此处捕获并处理异常
        Exception exception = context.Exception;

        // 可以在此处修改返回结果或执行其他操作
        /*
        context.Result = new ViewResult
        {
            ViewName = "Error",
            ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
            {
                Model = exception.Message
            }
        };
        */

        // 可以在此处标记异常已处理,阻止其继续传播
        // context.ExceptionHandled = true;

        // 可以在此处记录异常日志
        // logger.LogError(exception, "An error occurred");
    }
}

在上述示例中,我们创建了一个名为 MyExceptionFilter 的异常过滤器,并实现了 IExceptionFilter 接口。在 OnException 方法中,我们可以捕获发生的异常,并对其进行处理。在方法中,您可以根据需求修改返回结果、标记异常已处理、记录异常日志等。

要使用该异常过滤器,您可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyExceptionFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,如果发生了异常,就会触发异常过滤器的逻辑。

5. Resource Filter 资源过滤器

资源过滤器(Resource Filter)是 ASP.NET Core 中一种用于在请求处理期间对资源进行前置或后置处理的过滤器类型。资源过滤器允许您在请求处理的不同阶段对资源进行拦截、修改或替换,以实现一些通用的处理逻辑或功能增强。

ASP.NET Core 提供了两个内置的资源过滤器接口:

  • IResourceFilter:定义了 BeforeResourceExecution 和 AfterResourceExecution 方法,分别在请求处理前和请求处理后被调用。
  • IAsyncResourceFilter:与 IResourceFilter 类似,但支持异步操作。
适用场景

资源过滤器在许多不同的场景中都非常有用,以下是一些常见的适用场景:

  • 认证和授权:资源过滤器可以用于实现认证和授权逻辑。通过在资源过滤器中进行身份验证和权限检查,您可以确保只有经过身份验证且具有足够权限的用户才能访问受保护的资源。这对于保护敏感信息和限制访问权限非常重要。
  • 输入验证和数据转换:资源过滤器可以用于验证和转换输入数据。通过在资源过滤器中对请求参数进行验证和处理,您可以确保输入数据的合法性和一致性。这有助于防止潜在的安全漏洞和数据不一致性问题。
  • 缓存和结果缓存:资源过滤器可以用于实现缓存和结果缓存逻辑。通过在资源过滤器中检查缓存并返回缓存的结果,您可以提高应用程序的性能和响应速度。对于一些计算密集型或重复性的操作,结果缓存是一种非常有效的优化策略。
  • 日志记录和跟踪:资源过滤器可以用于实现日志记录和跟踪功能。通过在资源过滤器中添加日志记录逻辑,您可以记录请求和响应的详细信息,以便后续的故障排查和分析。这有助于了解应用程序的行为和性能,并提供更好的运维支持。
  • 异常处理和错误处理:资源过滤器可以用于实现异常处理和错误处理逻辑。通过在资源过滤器中捕获和处理异常,您可以统一处理应用程序中发生的异常情况,并返回合适的错误响应。这有助于提供更友好和一致的用户体验。
  • 性能监控和统计:资源过滤器可以用于实现性能监控和统计功能。通过在资源过滤器中检测和统计请求的处理时间、资源使用情况等指标,您可以了解应用程序的性能状况,并采取相应的优化措施。这对于保证应用程序的稳定性和可靠性非常重要。
代码示例

以下是一个简单的资源过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;

public class MyResourceFilter : IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        // 在请求处理前被调用

        // 可以在此处访问和修改请求资源,如路由数据、查询参数等
        /*
        string controller = context.RouteData.Values["controller"].ToString();
        string action = context.RouteData.Values["action"].ToString();
        string id = context.HttpContext.Request.Query["id"].ToString();
        */

        // 可以在此处执行一些前置处理逻辑
        // 如权限验证、请求日志记录等
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
        // 在请求处理后被调用

        // 可以在此处访问和修改响应结果,如状态码、内容等
        /*
        int statusCode = context.HttpContext.Response.StatusCode;
        string responseBody = context.HttpContext.Response.Body.ToString();
        */

        // 可以在此处执行一些后置处理逻辑
        // 如响应结果日志记录、性能监控等
    }
}

在上述示例中,我们创建了一个名为 MyResourceFilter 的资源过滤器,并实现了 IResourceFilter 接口。在 OnResourceExecuting 方法中,我们可以访问和修改请求资源,例如路由数据、查询参数等,并执行一些前置处理逻辑。在 OnResourceExecuted 方法中,我们可以访问和修改响应结果,例如状态码、内容等,并执行一些后置处理逻辑。

要使用该资源过滤器,您可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyResourceFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发资源过滤器的逻辑。

4. 总结

在这里插入图片描述
以上是 .NET Core 中常用的几种 Filter,每种 Filter 都有其特定的作用和使用场景。可以根据自己的需求选择合适的 Filter 来增加请求处理管道的灵活性和可扩展性。

5. 参考文档

  • ASP.NET Core 中的筛选器 | Microsoft Learn
  • ASP.NET Core 中的管道机制 - hippieZhou - 博客园
  • ASP.NET CORE 管道模型及中间件使用解读 - Jlion - 博客园
  • ASP.NET Web API标准的管道式设计 - Artech - 博客园
  • 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常) - Yaopengfei - 博客园
    在这里插入图片描述

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

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

相关文章

质量技术AI提效专题分享-得物技术沙龙

活动介绍 本次“质量技术&AI提效专题分享”沙龙聚焦于质量技术和AI效率领域,将为您带来四个令人期待的演讲话题: 1、《智能化提效实践》 2、《仿真自动化在饿了么金融实践分享》 3、《得物精准测试提效应用》 4、《广告算法灰度拦截实践》 相信这些…

入门Java编程的知识点—>IO流(day13)

重点掌握IO流作用是什么?重点掌握字节流的作用是什么?如何使用?重点掌握缓冲流的作用是什么?如何使用? IO简介 I (in):输入指得就是从外界进入到程序的方向,通常我们是需要读取外界的数据,所以输入流就是用来读取数据的。 …

超越 CAPE 旧模式,P-CAPE 开创股市回报预测新局面

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文主要介绍的是周期性调整市盈率(CAPE)及其倒数 CAEY 常用于评估股市长期回报,但原始 CAPE 有局限,未充分考虑未分配收益。未分配收益可再投资或回购股票影响收益。应调整周期性调整后的收益为…

【基础】Three.js中添加操作面板,GUI可视化调试(附案例代码)

1.先引入GUI库: import { GUI } from "three/addons/libs/lil-gui.module.min.js";2.实例化gui对象,并添加需要显示的参数: // 实例化一个gui对象const gui new GUI();//设置操作面板位置gui.domElement.style.right "0px";gui.d…

阿里云私有镜像仓库配置及使用

1 登录阿里云 阿里云访问地址:https://www.aliyun.com/ 右上角选择“控制台” 2 创建个人实例 搜索框搜索“容器镜像服务” 新建“个人实例” 选择“创建个人版” 同意协议,点击确定 3 个人实例配置 设置Registry登录密码 密码要求&#xff1…

【卷起来】VUE3.0教程-01-环境搭建与安装

​分享不易,耗时耗力,麻烦给个不要钱的关注和赞吧 🌲 什么是VUE Vue 是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。但 Web 世界是十分多样化的,不同的开发者在 Web 上构建的东西可能在形式和规模…

扑捉一只耿鬼(HTML文件)

图例&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>耿鬼</title><style>body {background: #fff;font-family: Comfortaa, sans-serif;}* {box-sizing:…

【动图效果概览】自动化建链后,Exata调用STK更新卫星位置

如下图所示&#xff0c;动画遵循 时间前进方向&#xff0c;划分截取为5段 &#xff08;因为每张照片限制大小5MB&#xff0c;不够应该够看清个大概意思了&#xff09;&#xff1a;

BIO、NIO编程与直接内存、零拷贝详解

目录 一、网络通信编程基本常识 什么是 Socket&#xff1f; 短连接 长连接 什么时候用长连接&#xff0c;短连接&#xff1f; 网络编程里通用常识 二、Java 原生网络编程-BIO 原生 JDK 网络编程 BIO 原生 JDK 网络编程 NIO 什么是 NIO&#xff1f; 和BIO 的主要区别 NI…

C语言中的运算符

一,算数运算符 基本算术运算符&#xff1a; 加法&#xff08;&#xff09;&#xff1a;用于两个数相加。例如 int a 3 5;&#xff0c;结果 a 的值为 8。 减法&#xff08;-&#xff09;&#xff1a;两个数相减。如 int b 7 - 4;&#xff0c;b 的值为 3。 乘法&#xff08;*…

使用推测解码提高 LLM 推理速度

使用尖端优化技术加速推理的实用指南 欢迎来到雲闪世界。大型语言模型非常耗电&#xff0c;需要大量 GPU 资源才能发挥良好性能。然而&#xff0c;Transformer 架构并没有充分利用 GPU。 从设计上讲&#xff0c;GPU 可以并行处理&#xff0c;但 Transformer 架构是自回归的。为…

哈希表两数求和

leetcode题目链接 这道题思路可以说easy 首先想到的就是两层for循环 代码如下 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int>result;int lengthnums.size();for(int i0;i<length;i){for(int ji1;j<…

【drools】电影推荐搭建

同步用了很久很久 反复了很多了次,最终: drools用的都是9.*** Y9KP 代码 D:\Future\06_movie-recommendation-system-springboot-drools-rule-engine\recommendation\src\main\resources\com.recommendation.movie.rules\medicine_symptoms.drl在spring boot 中集成drools做电…

16.神经网络 - 卷积层

神经网络 - 卷积层 pytorch官网网站卷积层&#xff08;Convolution Layers&#xff09;&#xff1a;Convolution Layers nn.Conv1d 一维卷积Applies a 1D convolution over an input signal composed of several input planes.nn.Conv2d 二维卷积Applies a 2D convolution ov…

扁线电机介绍

相比于圆线&#xff0c;扁线因为扁平矩形的特殊性能够让线圈缠绕更加紧密&#xff0c;槽满率由原先的40%提升到70%。 这意味着相同体积下线圈中的导线更多&#xff0c;电流的传导效率更高&#xff0c;能够减少电阻损耗&#xff0c;产生的磁场更强&#xff0c;电机功率也就更大&…

【软件工程】软件与软件危机

考点1 软件与软件危机 一、软件 1. 定义 在计算机系统支持下&#xff0c;能够完成特定功能和性能的程序、数据和相关的文档。 2. 软件的分类 二、软件危机 在计算机软件开发和维护过程中所遇到的一系列严重问题。 1. 包含两个方面&#xff1a; 如何开发软件如何维护软件…

Rocm-HIP kernel language

HIP的内核启动语法hipLaunchKernelGGL是一个宏&#xff0c;可以作为启动内核的替代方式&#xff0c;它接受启动配置的参数&#xff08;网格维度、分组维度、流、动态共享大小&#xff09;以及任意数量的内核参数。这个宏可以替代CUDA中的三连字符&#xff08;<<< >…

[记录] linux 虚拟机装 windows10

简介 本机系统&#xff1a;Ubuntu22.04 虚拟机&#xff1a;gnome-boxes 相关资料&#xff1a;度盘 安装流程 安装 gnome-boxes sudo apt install gnome-boxes安装 windows10 打开 Boxes, 选择准备好的 windows10 ISO 文件 可以从官网下载&#xff0c;也可以从我给的资料里获…

OpenCV小练习:身份证号码识别

目标&#xff1a;针对一张身份证照片&#xff0c;把身份证号码识别出来&#xff08;转成数字或字符串&#xff09;。 实现思路&#xff1a;需要将目标拆分成两个子任务&#xff1a;(1) 把身份证号码区域从整张图片中检测/裁剪出来&#xff1b;(2) 将图片中的数字转化成文字。第…

【python】OpenCV—Multi Human Pose Estimation

文章目录 1、背景介绍2、关键点检测模型3、源码与结果4、源码解读——检测关键点5、源码解读——找到有效对6、源码解读——组装个人关键点7、涉及到的库cv2.dnn.blobFromImage 8、参考 1、背景介绍 【python】OpenCV—Single Human Pose Estimation 本文以 COCO 格式为例&am…