使⽤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": "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
await和async使用方法{
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 扩展⽅法。
参考资料:
以上所述是⼩编给⼤家介绍的使⽤VS2022在ASP.NET Core中构建轻量级服务,希望对⼤家有所帮助。在此也⾮常感谢⼤家对⽹站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论