首页 程序笔记 MiniAPI参数绑定 服务注入 响应输出使用示例

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

在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 对象写入响应。
3

站心网

在VS2022中可以使用MiniAPI。 使用MiniAPI以创建具有最小依赖项的 HTTP API。 它们非常适合于需要在 ASP.NE..

为您推荐

.NET C# 过滤从富文本编辑器html里的Javascript脚本

富文本编辑器在允许用户输入丰富内容的同时,也带来了跨站脚本攻击(XSS)的风险。过滤提交的 HTML 中的 <script> 脚本是防止跨站脚本攻击(XSS)的关键步骤。在 .NET C# 服务端过滤 <script> 脚本主要有以下几种方..

ZLinq:.NET 高性能 LINQ 替代方案及其使用指南

在 .NET 开发中,LINQ(Language Integrated Query)为数据查询提供了简洁且强大的语法。然而,传统的 LINQ 在处理大量数据时可能会引发性能瓶颈,主要由于频繁的内存分配和对象创建。为解决这一问题,Cysharp 团队..

.NET使用AutoMapper简化对象映射

在.NET软件开发中,常常需要将一个对象的数据转换并映射到另一个对象上。​这种手动映射的过程既繁琐又容易出错,影响开发效率和代码可维护性。​为了解决这一问题,AutoMapper应运而生。​什么是 AutoMapper?AutoM..

.NET C# RESTful API交互Refit库使用教程

Refit 是一个 .NET C# 库,它简化了与 RESTful API 的交互。Refit 受到 Square 的 Retrofit 库的启发,它将 REST API 转换为实时接口,允许你以声明方式定义 REST API 调用。Refit 的特点1. 声明式 API 定义:Refit ..

.NET C# System.Text.Json进阶使用技巧

System.Text.Json 是 .NET 中用于处理 JSON 数据的强大库。除了基本用法外,它还提供了许多进阶技巧,可以帮助你更高效、更灵活地处理 JSON 数据。以下是一些 System.Text.Json 的进阶使用技巧:1. 自定义序列化和反..

.NET Core 使用ML.NET 机器学习分析预测股票走势

在 .NET Core 中,你可以利用 ML.NET 框架来构建机器学习模型,以预测股票价格走势。以下是一个基本的实现步骤:​1. 准备数据:​收集并整理股票的历史数据,包括日期、开盘价、最高价、最低价、收盘价和成交量等信..

.NET 日志库 Serilog 使用教程

1. Serilog 简介Serilog 是 .NET 生态中强大且灵活的日志库,支持结构化日志记录,并提供多种日志接收器(Sinks),可以将日志输出到控制台、文件、数据库等不同存储介质。Serilog 适用于控制台应用、ASP.NET Core ..

轻松学习 JavaScript函数中的默认参数

JavaScript函数可以有默认参数值。通过默认函数参数,你可以初始化带有默认值的正式参数。如果不初始化具有某些值的参数,则该参数的默认值为undefined。请看下列代码:function foo(num1){console.log(num1);}foo()..

ASP.Net Core WebApi几种版本控制对比

一、版本控制的好处:(1)有助于及时推出功能, 而不会破坏现有系统。(2)它还可以帮助为选定的客户提供额外的功能。API 版本控制可以采用不同的方式进行控制,方法如下:(1)在URL 中追加版本或作为查询字符串参..

.NET CORE 设置cookie以及获取cookie

使用我这个方式的前提是在mvc中,确认你安装了:Microsoft.AspNetCore.Mvc.然后在继承了Controller的类型中使用我所说的方法。直接使用即可,我是封装了方法供我自己使用,代码如下: public abstract class Control..

C#中数组作为参数传递的问题

原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值。如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难..

.NET C# 单元测试 mock File.Exists的返回值

在 .NET 单元测试中,使用 Moq 来模拟 File.Exists 方法的返回值,可以这样做:1. 使用 Mock<FileSystem>(推荐).NET 提供了 System.IO.Abstractions 库,你可以使用 Mock<IFileSystem> 来替代 File,这样更符合依..

.NET Core 适配 鸿蒙HarmonyOS 的最新进展

.NET Core适配鸿蒙HarmonyOS的最新进展:运行能力方面目前.Net完全具备可以在OpenHarmony系统上运行的能力。其中,NativeAOT方式是较为可行的一种,它编译出的原生so不依赖glibc,可与鸿蒙系统的libc兼容,能在鸿蒙..

VS创建.NET Core项目使用Docker方式部署到Linux服务器

在 Visual Studio(VS) 中,使用 Docker 方式部署 .NET Core 项目 到 Linux 服务器,可以简化环境管理并提高部署效率。以下是完整教程:1. 在 VS 创建 .NET Core 项目并启用 Docker新建 ASP.NET Core 项目打开 Visu..

.NET C#查询全球IP地址信息 IPTools库 使用教程

IPTools 是一个用于快速查询全球 IP 地址信息的库,支持国内和国际 IP 查询,提供详细的地理位置信息(如国家、省份、城市)以及经纬度等数据。IPTools GitHub地址:https://github.com/stulzq/IPToolsIPTools.China..

2025年.NET 10 和 C# 13 新特性示例

.NET 10预计将于2025年11月正式发布,带来一系列性能优化、开发者效率提升和跨平台能力增强。尽管官方功能集仍在开发中,早期预览版与社区讨论已揭示了多项值得期待的改进。这些增强将基于.NET 9的基础,引入新语言..

.NET Core网站减少内存占用的方法

在.NET Core网站开发中,有效管理内存占用对于保证应用程序的性能和稳定性至关重要。以下是一些减少内存占用的关键策略,它们着重于代码优化、内存管理以及相关因素的综合考虑。代码层面的优化首先,编写高效的代码..

.NET平台QR二维码生成库Net.Codecrete.QrCodeGenerator使用教程

今天给大家介绍一个免费的二维码生成库 Net.Codecrete.QrCodeGenerator ,它非常简洁、易用,且可以生成符合二维码标准的二维码图像。Net.Codecrete.QrCodeGenerator是一个开源的二维码生成库,适用于.NET平台。它基..

.NET9 SDK 新版本引入了新的解决方案文件格式.slnx

微软发布了 .NET 9 SDK 的新版本, 在这个新版本中引入了新的解决方案文件格式 slnx 的支持, 现在可以从 dotnet cli 来创建和维护 slnx 了, 并且支持了从 sln 迁移到 slnx, 目前 VisualStudio 和 Rider 都已经支持了 ..

.NET10 C#13最新语法糖用法示例

.NET 10 与 C# 13 带来了更高效的语法和更灵活的类型支持,包括 params 集合扩展、新的 \e 转义序列、方法组的自然类型推断优化,以及 ref struct 允许实现接口等特性,进一步提升了开发体验和代码可读性。C# 13 引..

发表回复

返回顶部