使用VS2022在ASP.NET Core中构建轻量级服务

目录
  • 1. 使用 VS2022 创建 ASP.NET Core 项目
  • 2. 在 ASP.NET Core 中启用一个轻量级的服务
  • 3. 在 ASP.NET Core 中使用 IEndpointConventionBuilder 扩展方法
  • 4. 在 ASP.NET Core 中使用轻量级服务检索记录
  • 5. 在 ASP.NET Core 中使用轻量级服务创建记录
  • 6. 在 ASP.NET Core 中使用轻量级服务删除记录
  • 7. ASP.NET Core 中轻量级服务的配置方法
  • 8. 在 ASP.NET Core 的 Program 类中创建轻量级服务

在 ASP.NET Core 中处理 Web 应用程序时,我们可能经常希望构建轻量级服务,也就是没有模板或控制器类的服务。

轻量级服务可以降低资源消耗,而且能够提高性能。我们可以在 Startup 或 Program 类中创建这些轻量级服务或 API。

1. 使用 VS2022 创建 ASP.NET Core 项目

我们在 Visual Studio 2022 中创建一个 ASP.NET Core 项目。按照以下步骤在 Visual Studio 2022 中创建一个新的 ASP.NET Core Web API 6 项目。

  • 1) 启动 Visual Studio 2022 IDE。
  • 2) 单击 “Create new project”。
  • 3) 在 “Create new project” 窗口中,从显示的模板列表中选择 “ASP.NET Core Web API”。
  • 4) 点击下一步。
  • 5) 在 “Configure your new project” 窗口中,指定新项目的名称和位置。
  • 6) 根据您的偏好,可选择选中 “Place solution and project in the same directory” 复选框。
  • 7) 点击下一步。
  • 8) 在接下来显示的 “Additional Information” 窗口中,从顶部的下拉列表中选择 .NET 6.0 作为目标框架。将 “Authentication Type” 保留为 “None”(默认)。
  • 9) 确保未选中 “Enable Docker,”、“Configure for HTTPS” 和 “Enable Open API Support” 复选框,因为我们不会在此处使用任何这些功能。您也可以选择取消选中 “Use controllers(取消选中以使用最少的 API)” 复选框,因为我们将创建自己的控制器。
  • 10) 单击创建。

这将在 Visual Studio 2022 中创建一个新的 ASP.NET Core 6 Web API 项目。我们将在本文的后续部分中使用该项目,来说明如何使用轻量级服务。

2. 在 ASP.NET Core 中启用一个轻量级的服务

由于我们将构建不需要控制器的轻量级服务,所以应该删除 Controllers solution 文件夹和默认创建的任何模型类。

接下来,打开 Properties solution 文件夹下的 launchSettings.json 文件,删除或注释掉 launchUrl 键值对,如下面给出的代码所示。

其中,launchUrl 是指应用程序的主机。当应用程序启动时,launchURL 中指定的 URL 用于启动应用程序。

如果 URL 错误或不存在,应用程序将在启动时抛出错误。通过删除 launchUrl 或将其注释掉,我们可以确保应用程序不使用默认的 launchUrl 来启动应用程序,从而避免任何错误。一旦 launchUrl 被删除,应用程序将回到 5000 端口。

"profiles": {
    "Light_Weight_Services": {
        "commandName": "Project",
        "dotnetRunMessages": true,
        "launchBrowser": true,
        //"launchUrl": "",
        "applicationUrl": "http://localhost:5000",
        "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
        }
    },
    "IIS Express": {
        "commandName": "IISExpress",
        "launchBrowser": true,
        //"launchUrl": "",
        "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
        }
    }

3. 在 ASP.NET Core 中使用 IEndpointConventionBuilder 扩展方法

我们可以利用 IEndpointConventionBuilder 接口的一些扩展方法来映射请求。

以下是这些扩展方法的列表:

  • MapGet
  • MapPost
  • MapDelete
  • MapPut
  • MapRazorPages
  • MapControllers
  • MapHub
  • MapGrpcServices

MapGet、MapPost、MapDelete 和 MapPut 方法用于将请求委托连接到路由系统。MapRazorPages 用于 RazorPages,MapControllers 用于 Controllers,MapHub 用于 SignalR,MapGrpcService 用于 gRPC。

以下代码说明了怎么使用 MapGet 创建 HTTP Get 端点。

endpoints.MapGet("/", async context =>
{
     await context.Response.WriteAsync("Hello World!");
});

我们创建一个名为 Author 的 C# 文件,包含以下代码:

public class Author
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

创建一个 Author 的只读列表,并填充一些数据,如下所示:

private readonly List<Author> _authors;
    public Startup(IConfiguration configuration)
    {
        _authors = new List<Author>
        {
            new Author
            {
                Id = 1,
                FirstName = "Joydip",
                LastName = "Kanjilal"
            },
            new Author
            {
                Id = 2,
                FirstName = "Steve",
                LastName = "Smith"
            },
            new Author
            {
                Id = 3,
                FirstName = "Julie",
                LastName = "Lerman"
            }
        };
        Configuration = configuration;
    }

我们可以使用以下代码创建另一个端点,并以 JSON 格式返回作者列表。

endpoints.MapGet("/authors", async context =>
{
        var authors = _authors == null ? new List<Author>() : _authors;
        var response = JsonSerializer.Serialize(authors);
        await context.Response.WriteAsync(response);
});

4. 在 ASP.NET Core 中使用轻量级服务检索记录

要根据 Id 检索特定记录,我们可以编写以下代码:

endpoints.MapGet("/authors/{id:int}", async context =>
{
    var id = int.Parse((string)context.Request.RouteValues["id"]);
    var author = _authors.Find(x=> x.Id == id);
    var response = JsonSerializer.Serialize(author);
    await context.Response.WriteAsync(response);
});

5. 在 ASP.NET Core 中使用轻量级服务创建记录

要使用 HTTP Post 添加数据,我们可以利用 MapPost 扩展方法,如下所示:

endpoints.MapPost("/", async context =>
{
    var author = await context.Request.ReadFromJsonAsync<Author>();
    _authors.Add(author);
    var response = JsonSerializer.Serialize(author);
    await context.Response.WriteAsync(response);
});

6. 在 ASP.NET Core 中使用轻量级服务删除记录

要删除数据,我们可以利用 MapDelete 扩展方法,如下所示:

endpoints.MapDelete("/authors/{id:int}", async context =>
{
    var id = int.Parse((string)context.Request.RouteValues["id"]);
    var author = _authors.Find(x => x.Id == id);
    _authors.Remove(author);
    var response = JsonSerializer.Serialize(_authors);
    await context.Response.WriteAsync(response);
});

7. ASP.NET Core 中轻量级服务的配置方法

下面是 Startup 类的 Configure 方法的完整源码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
        endpoints.MapGet("/authors", async context =>
        {
            var authors = _authors == null ? new List<Author>() : _authors;
            var response = JsonSerializer.Serialize(authors);
            await context.Response.WriteAsync(response);
        });
        endpoints.MapGet("/authors/{id:int}", async context =>
        {
            var id = int.Parse((string)context.Request.RouteValues["id"]);
            var author = _authors.Find(x=> x.Id == id);
            var response = JsonSerializer.Serialize(author);
            await context.Response.WriteAsync(response);
        });
        endpoints.MapPost("/", async context =>
        {
            var author = await context.Request.ReadFromJsonAsync<Author>();
            _authors.Add(author);
            var response = JsonSerializer.Serialize(author);
            await context.Response.WriteAsync(response);
        });
        endpoints.MapDelete("/authors/{id:int}", async context =>
        {
            var id = int.Parse((string)context.Request.RouteValues["id"]);
            var author = _authors.Find(x => x.Id == id);
            _authors.Remove(author);
            var response = JsonSerializer.Serialize(_authors);
            await context.Response.WriteAsync(response);
        });
    });
}

8. 在 ASP.NET Core 的 Program 类中创建轻量级服务

在 ASP.NET 6 中还有另一种创建轻量级服务的方法。我们创建新的 ASP.NET Core 6 空项目时,默认情况下不会创建 Startup.cs 文件。因此,我们可以在 Program.cs 文件中编写代码,创建轻量级服务。

下面的例子说明如何执行此操作:

app.MapGet("/", () => "Hello World!");
app.MapDelete("/{id}", (Func<int, bool>)((id) => {
    // 删除记录代码
    return true;
}));
    app.MapPost("/", (Func<Author, bool>)((author) => {
    // 添加记录代码
    return true;
}));
app.Run();

轻量级服务或 API 没有模板,也不需要控制器类来创建它们。

我们可以在 Startup 或 Program 类中创建此类服务。

如果我们要在轻量级服务中实现授权,可以利用 IEndpointConventionBuilder 接口的 RequireAuthorization 扩展方法。

参考资料:

编程宝库​​​

​C#编程​

以上所述是小编给大家介绍的使用VS2022在ASP.NET Core中构建轻量级服务,希望对大家有所帮助。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 三种方法解决ASP.NET Core 6中的依赖项

    依赖性注入是一种技术,它允许我们注入一个特定类的依赖对象,而不是直接创建这些实例. 使用依赖注入的好处显而易见,它通过放松模块间的耦合,来增强系统的可维护性和可测试性. 依赖注入允许我们修改具体实现,而不必改变依赖于它们的依赖类型. ASP.NET Core 很重视依赖注入技术.ASP.NET Core 中内置的依赖注入提供功能模块,并不像 StructureMap 和 Ninject 等IoC(控制反转)容器那样功能丰富,但它速度快,易于配置,而且易于使用.我们可以使用它在 ASP.NET C

  • ASP.NET Core  依赖注入框架的使用

    目录 一.IoC框架 二.IoC-Autofac 三..NET Core中自带DI的使用 四.Autofac 使用 五.批量注入 前言: 还记得上篇文章中ASP.NET Core 依赖注入详细最后提及到,假如服务越来越多怎么处理呢,本篇文章将会带来解决办法.这篇是接上一篇文章的,概念方面的可以参考上一篇文章. 一.IoC框架 先说说常见的Ioc框架吧. Autofac: 目前net用的比较多,好多大佬的项目比较优先选择的框架. Ninject: 已经很少用了,还时在很早的文章中见过. Unity

  • ASP.NET Core应用JWT进行用户认证及Token的刷新方案

    目录 一.什么是JWT? 为什么要使用JWT? 二.JWT的组成: Header Payload Signature 三.认证流程 四.应用实例 认证服务 User相关: TokenHelper: 应用服务 五.Token的刷新 本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案 一.什么是JWT? JWT(json web token)基于开放标准(RFC 7519),是一种无状态的分布式的身份验证方式,主要用于在网络应用环境间安全地传递声

  • 理解ASP.NET Core 错误处理机制(Handle Errors)

    目录 使用中间件进行错误处理 开发人员异常页 IDeveloperPageExceptionFilter 异常处理程序 通过lambda提供异常处理程序 异常处理程序页 无响应正文的Http错误状态码处理 UseStatusCodePages UseStatusCodePagesWithRedirects UseStatusCodePagesWithReExecute 使用过滤器进行错误处理 错误处理中间件 VS 异常过滤器 注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博

  • 使用VS2022在ASP.NET Core中构建轻量级服务

    目录 1. 使用 VS2022 创建 ASP.NET Core 项目 2. 在 ASP.NET Core 中启用一个轻量级的服务 3. 在 ASP.NET Core 中使用 IEndpointConventionBuilder 扩展方法 4. 在 ASP.NET Core 中使用轻量级服务检索记录 5. 在 ASP.NET Core 中使用轻量级服务创建记录 6. 在 ASP.NET Core 中使用轻量级服务删除记录 7. ASP.NET Core 中轻量级服务的配置方法 8. 在 ASP.N

  • 在 ASP.NET Core 中为 gRPC 服务添加全局异常处理

    目录 一.咨询区 Dmitriy 二.回答区 valentasm 三.点评区 以下文章来源于公众号:DotNetCore实战 一.咨询区 Dmitriy 在 ASP.NET Core 中使用GRPC.ASPNETCore 工具包写 gRPC 服务,想实现 gRPC 的异常全局拦截, 代码如下: app.UseExceptionHandler(configure => {     configure.Run(async e =>     {         Console.WriteLine(&

  • ASP.NET Core中引用OpenAPI服务添加示例

    目录 文章目录 前言:一.将 Swagger 引入 WebAPI 项目二.添加 OpenAPI 服务引用参考文档 前言: 本文使用 .NET Core SDK 3.1 的版本.在我们使用微服务的时候,各个微服务之间会经常调用接口,但是手动写Http请求的代码非常繁琐,在 Visual Studio 2019 的 .NET Core 项目中提供了添加连接的服务的功能,使得我们的工作变得简单容易. 一.将 Swagger 引入 WebAPI 项目 将 Swagger 引入 ASP.NET Core

  • ASP.NET Core中快速构建PDF文档的步骤分享第1/2页

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本文中我们将要使用DinkToPDF来处理我们在.NET Core Web 程序中进行构建PDF文档!就现在我们不多说,直接开始有趣的部分. 前言# 您可以通过创建PDF文档在我的仓库中,获取源代码,欢迎给个免费的Star... 现在我们创建一个.NET Core 3.0 项目,至于是mvc.Api.

  • 如何在ASP.Net Core中使用 IHostedService的方法

    在我们应用程序中常常会有一些执行后台任务和任务调度的需求,那如何在 ASP.Net Core 中实现呢? 可以利用 Azure WebJobs 或者其他一些第三方任务调度框架,如:Quartz 和 Hangfire. 在 ASP.Net Core 中,也可以将 后台任务 作为托管服务的模式,所谓的 托管服务 只需要实现框架中的 IHostedService 接口并囊括进你需要的业务逻辑作为后台任务,这篇文章将会讨论如何在 ASP.Net Core 中构建托管服务. 创建托管服务 要想创建托管服务

  • asp.net Core中同名服务注册的实现代码

    目录 1.使用.net Core自带容器 2.AutoFac中的实现 通常情况下,在使用注入时一个服务接口对应一个实现类,注入方式采用构造函数注入即可,但如果存在多个类实现同一个接口的情况下,则需要根据实际情况来选择不同的实现类. 如以下代码中的MyEmailService和EmailService都实现了IEmailService接口: public class MyEmailService : IEmailService { public string Send(string Email)

  • 详解ASP.NET Core 中的框架级依赖注入

    1.ASP.NET Core 中的依赖注入 此示例展示了框架级依赖注入如何在 ASP.NET Core 中工作. 其简单但功能强大,足以完成大部分的依赖注入工作.框架级依赖注入支持以下 scope: Singleton - 总是返回相同的实例 Transient - 每次都返回新的实例 Scoped - 在当前(request)范围内返回相同的实例 假设我们有两个要通过依赖注入来进行工作的工件: PageContext - 自定义请求上下文 Settings - 全局应用程序设置 这两个都是非常

  • ASP.NET Core中预压缩静态文件的方法步骤

    前言 Web应用程序的优化是非常重要,因为使用更少的CPU,占用更少的带宽可以减少项目的费用. 在ASP.NET Core中我们可以很容易的启用响应压缩,但是针对预压缩文件,就需要做一些额外的功能了. 这篇博客文章展示了如何在ASP.NET Core中预压缩静态文件. 下面话不多说了,来一起看看详细的介绍吧 为什么需要预压缩文件? 虽然在从服务器请求文件时, 我们可以动态压缩文件,但这意味这Web服务器需要做更多的额外工作. 其实只有在新的应用程序部署时才会更改要压缩的文件. 越好的压缩效果需要

  • ASP.NET Core中如何使用表达式树创建URL详解

    表达式树(Expression Tree) 表达式树是不可执行的代码,它只是用于表示一种树状的数据结构,树上的每一个节点都表示为某种表达式类型,大概有25种表达式类型,它们都派生自Expression类.创建表达式树具体有两个优势: 1.对表达式树的代码进行编辑修改,使表达式树中的代码变成动态代码,根据不同的数据库修改树上的代码逻辑从而达到动态切换数据库查询语句的目的,用表达式树可以动态构建针对不同数据库的查询语句. 2.完成类似反射访问未知对象的属性,通过动态构造表达式树,生成委托. 当我们在

  • ASP.NET Core中如何实现重定向详解

    前言 ASP.NET Core 是一个跨平台,开源的,轻量级的,模块化的,用于构建高性能的 web 开发框架, ASP.NET Core MVC 内置了多种方式将一个 request 请求跳转到指定的url,这篇文章我们就来讨论如何去实现. 理解 RedirectActionResult ASP.NET Core MVC 中内置了几种 Redirect,比如说:RedirectResult, RedirectToActionResult, RedirectToRouteResult 和 Loca

随机推荐