在 .NET 6 中创建Minimal API 的两种方法

作者 : 慕源网 本文共1634个字,预计阅读时间需要5分钟 发布时间: 2021-10-28 共342人阅读

Minimal API 是一个新模板,它使用所有 C# 10 功能和 .NET 6 来创建具有较低复杂性、层、类或使用带有控制器的传统 MVC 模板的简单服务。这是受其他技术(如 node.js、python 和 go)的启发。 

要创建最小的 API,您可以在 Dotnet CLI 或 Visual Studio 2022(或更高版本)中使用命令dotnet new web,有一个创建相同结构的空模板。

在 .NET 6 中创建Minimal API 的两种方法

在 .NET 6 中创建Minimal API 的两种方法

所有逻辑和架构都在一个文件中,即 Program.cs,您将在其中包含逻辑、类、端点和服务。 

该模板包括一个带有 helloword 示例的端点。多亏了 C# 10 的特性,我们不需要命名空间或 main 方法和类。

在 .NET 6 中创建Minimal API 的两种方法

有两种方法可以为 Minimal API 创建端点。首先,直接使用端点方法,我们必须手动获取服务、响应和参数。在以下示例中,它从RequestServices 获取TodoDbContext并使用WriteAsJsonAsync写入响应。

app.MapGet("/todoitems", async (http) => {
    var dbContext = http.RequestServices.GetService < TodoDbContext > ();
    var todoItems = await dbContext.TodoItems.ToListAsync();
    await http.Response.WriteAsJsonAsync(todoItems);
});

如果要返回特定状态码并获取参数,则必须手动设置或获取。在下面的示例中,当 id 无效时返回400,更新记录时返回204,并且它再次从 RequestServices 获取上下文(TodoDbContext)。

app.MapPut("/todoitems/{id}", async (http) => {
    if (!http.Request.RouteValues.TryGetValue("id", out
            var id)) {
        http.Response.StatusCode = 400;
        return;
    }
    var dbContext = http.RequestServices.GetService < TodoDbContext > ();
    var todoItem = await dbContext.TodoItems.FindAsync(int.Parse(id.ToString()));
    if (todoItem == null) {
        http.Response.StatusCode = 404;
        return;
    }
    var inputTodoItem = await http.Request.ReadFromJsonAsync < TodoItem > ();
    todoItem.IsCompleted = inputTodoItem.IsCompleted;
    await dbContext.SaveChangesAsync();
    http.Response.StatusCode = 204;
});

第二种方法是使用属性和结果对象。这看起来与使用 MVC 和控制器的传统 API 非常相似。[FromServices] 获取配置中的服务。

app.MapGet("/todoitems/{id}", async ([FromServices] TodoDbContext dbContext, int id) => {
    var todoItem = await dbContext.TodoItems.FindAsync(id);
    if (todoItem == null) {
        return Results.NotFound();
    }
    return Results.Ok(todoItem);
});

要使用结果和 FromServices 属性,您必须使用 Microsoft.AspNetCore.Mvc添加 ;在文件中。

完整代码:  Mteheran/DotnetMinimalApi (github.com)

两种方法都是正确的,但最后,如果你想使用更容易阅读的东西,第二种方法,我们使用装饰器和结果函数,要好得多。 


慕源网 » 在 .NET 6 中创建Minimal API 的两种方法

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录