返回

MiniAPI参数绑定 服务注入 响应输出使用示例

2022-11-23 MiniAPI .NET Core 参数绑定 注入 1961 1

在VS2022中可以使用MiniAPI。 使用MiniAPI以创建具有最小依赖项的 HTTP API。 它们非常适合于需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。

MiniAPI创建方法

启动 Visual Studio 2022 并选择“创建新项目”。

在“创建新项目”对话框中,选择“ASP.NET Core 空”模板,然后选择“下一步”。

在“其他信息”对话框中,选择“.NET 7.0” 或者 旧的“.NET 6.0”,取消选中“不使用顶级语句”,选择“创建”。

在Program.cs里包含如下代码。

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

其中app.MapGet("/", () => "Hello World!");就是一个MiniAPI, 按F5运行,通过http get请求/路径会输出Hello World!。

MiniAPI GET参数绑定示例:

Program.cs

builder.Services.AddScoped<IApiService, ApiService>();
app.MapGet("/api/test/{id?}", (int? id, // 绑定路由值
    [FromQuery] string? sid, // QueryString参数
    [FromHeader(Name = "CUSTOM-KEY-NAME")] string? customHeader, // Header值
    IApiService apiService // 依赖注入服务
    ) =>
{
    /// your code
    return Results.Ok();
});

其中服务注入需要在Program.cs里注册服务,否则会报错:

Body was inferred but the method does not allow inferred body parameters.
Below is the list of parameters that we found: 

Parameter           | Source                        
---------------------------------------------------------------------------------
platform            | Query String (Inferred)
env                 | Query String (Inferred)
type                | Query String (Inferred)
contact             | Query String (Inferred)
apiService          | Body (Inferred)

Did you mean to register the "Body (Inferred)" parameter(s) as a Service or apply the [FromService] or [FromBody] attribute?

如果没有注册服务,service参数被认为是绑定body参数所以报错了。

MiniAPI POST参数绑定示例

app.MapPost("/api/test", (Article article) =>
{
    // your code
    return Results.Ok(new
    {
        success = true,
        data = article
    });
});

这里会返回200状态的json:

{
    "success": true,
    "data": {
        "id": 1,
        "title": "this is title"
    }
}

MiniAPI相应输出

返回JSON结果

app.MapGet("/hello", () => Results.Json(new { Message = "Hello World" }));

返回TEXT结果

app.MapGet("/text", () => Results.Text("This is some text"));

返回自定义状态

app.MapGet("/405", () => Results.StatusCode(405));

内置返回结果

API
状态码
响应类型
说明
Results.Ok200application/json将状态代码设置为 200,并包含可选的 JSON 响应。
Results.Json200application/json(默认),可配置使用可选的序列化选项编写 JSON 响应。
Results.Text200text/plain(默认),可配置编写文本响应。
Results.Bytes200application/octet-stream(默认),可配置将响应编写为字节。
Results.Stream200application/octet-stream(默认),可配置将字节流写入响应。
Results.File200application/octet-stream(默认),可配置使用 content-disposition 标头将文件流式传输至响应以下载。
Results.Created201application/json将状态代码设置为 201,并包含可选的 JSON 响应和位置标头。
Results.Accepted202application/json将状态代码设置为 202,并包含位置标头。
Results.NoContent204空值将状态代码设置为 204。
Results.BadRequest400
空值将状态代码设置为 400,并包含可选的 JSON 响应。
Results.ValidationProblem400
空值将问题详细信息 JSON 对象写入包含验证错误的响应。
Results.Unauthorized401
空值将状态代码设置为 401。
Results.NotFound404
空值将状态代码设置为 404,并包含可选的 JSON 响应。
Results.Conflict409
空值将状态代码设置为 409,并包含可选的 JSON 响应。    
Results.UnprocessableEntity422
空值将状态代码设置为 422,并包含可选的 JSON 响应。
Results.Problem500(默认),可配置空值将问题详细信息 JSON 对象写入响应。


您可能感兴趣:

阿里云 云服务器 99元1年 2核2G 3M固定带宽 续费与新购同价

领取 通义灵码 免费使用资格 兼容 Visual Studio Code、Visual Studio、JetBrains IDEs 等主流编程工具, 为你提供高效、流畅、舒心的智能编码体验!

DOVE 网络加速器 梯子 免费 试用

网友点评
  • Amanda

    Mini API有哪些应用场景呢?一般都直接用WebAPI吧

顶部