ASP.NET Core 6 Minimal API

Intro

微软在 ASP.NET 6 Preview 4 的介绍文章中介绍了即将到来的 ASP.NET Core 6 中的最小 API 的雏形,我们现在已经基本可以达到最小化 API 了雏形了,在 Preview 4 的时候就写了这个小示例,但是不够简洁,没有达到最简洁的代码,现在在 Preview 5 上尝试一下,感觉已经很简洁了,于是就想分享一下

Sample-0

在 Preview 4 的时候,示例是下面这样的:

using System;
using Microsoft.AspNetCore.Builder;var app = WebApplication.Create(args);
app.Map("/", (Func<string>)(() => "Hello World"));
app.Run();

主要是使用了新增的 WebApplication/WebApplicationBuilder API,然后结合了 C# 9 中的 Top-Level Statement,去掉了 Main 方法的声明

C# 10 New Features

在即将到来 C# 10 中的两个新特性可以帮助我们简化这个特性,分别是:

  • global using

  • lamdba 优化

通过 global using 这个 feature 我们可以实现命令空间的统一管理这样就可以避免写很多 namespace 的引用了,我们可以把常用的 namespace 放在一个文件中管理,类似于 MVC 中的 _ViewImports.cshtml 和 Razor Page 中的 _Imports,这样就可以简化上面的 using 了,之前看介绍说是,ASP.NET Core 6 会把 ASP.NET Core 相关的常用的命令空间通过 global using 的方式默认引用,这样上面的示例中就不需要再引用命名空间了。

另外一个 feature 则是对于 lambda 表达式的优化,可以自动进行类型推断来隐式的转换成委托,就可以简化上面强制类型转换成 Func<string> 了,就可以自动的隐式转换了,

除此之外,我们还可以方便的在 lamdba 表达式上加 Attribute 注解,这有助于大大简化 API 书写的复杂度,具体看后面的示例吧

Sample-1

使用 C# 10 新特性之后的代码:

var app = WebApplication.Create(args);
app.Map("/", () => "Hello World");
app.Run();

主要有两点变化,一个是 Func<string> 的转换不再需要了,一个是命名空间的引用,会放在一个单独 Imports 文件中添加全局的命名空间引用

Imports 内容如下:

global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.Routing;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using Microsoft.Extensions.Logging;
global using Microsoft.Extensions.Configuration;

上面提到了我们可以很方便在 lamdba 表达式上使用 Attribute,下面我们就来一个例子:

var app = WebApplication.Create(args);
app.MapPost("/info", [HttpPost](IWebHostEnvironment env) => new
{Time = DateTime.UtcNow,env.EnvironmentName
});
app.Run();

除了 Attribute,我们还可以添加参数,参数可以自动从依赖注入服务中获取,如上面的 IWebHostEnvironment

接着我们来测试一下我们的 API 看试试 work 了吧,现在我们已经可以使用 dotnet watch 来运行项目,会自动启用 Hot Reload,但是测试发现,感觉现在的 ASP.NET Core 里的 Hot Reload,还是有点问题,需要使用 Ctrl + R 来重新 build 才能生效,不知道是不是我姿势不对,不知道大家有没有遇到这样的问题,希望后面的版本能够解决这个问题

可以通过 dotnet watch 来启动项目

接着我们就可以通过 http://localhost:5000 或者 https://localhost:5001 来访问我们的 API 了

访问 http://localhost:5000,会看到下面的结果

直接访问 http://localhost:5000/info,会看到类似下面的结果,这是因为我们的 info API 只允许 POST 方式进行访问

通过工具用 POST 方式访问 http://localhost:5000/info,可以看到类似下面的结果

可以看到我们的 API 都已经正常工作了~~

More

上面的示例代码可以在 Github 上获取 https://github.com/WeihanLi/SamplesInPractice/tree/master/net6sample/MininalAPI

编译需要安装 .NET 6  preview 5 环境

目前 .NET 6 Preview 还是有一些问题的,还不太建议大家实际项目进行升级,当然自己想尝试是可以的

如果使用遇到了什么问题,也可以通过 Github 上的 issue 向微软反馈 https://github.com/dotnet/core/issues/6389

References

  • https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-4/

  • https://github.com/WeihanLi/SamplesInPractice/tree/master/net6sample/MininalAPI

ASP.NET Core 6 Minimal API相关推荐

  1. asp编程工具_使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术文章<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  2. Asp Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step(三)

    翻译自 Mohamad Lawand 2021年1月25日的文章 <Refresh JWT with Refresh Tokens in Asp Net Core 5 Rest API Step ...

  3. Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step(二)

    翻译自 Mohamad Lawand 2021年1月22日的文章 <Asp Net Core 5 Rest API Authentication with JWT Step by Step> ...

  4. Asp.Net Core 5 REST API - Step by Step(一)

    翻译自 Mohamad Lawand 2021年1月19日的文章 <Asp.Net Core 5 Rest API Step by Step> [1] 在本文中,我们将创建一个简单的 As ...

  5. 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

    第 10 章 部署 10.1 部署到 IIS ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求 默认情况 ...

  6. ASP.NET Core和Web API:用于管理异常和一致响应的自定义包装器

    目录 介绍 为什么? 怎么做? VMD.RESTApiResponseWrapper Nuget软件包 安装及使用 ASP.NET Core集成 ASP.NET Web API集成 样本响应输出 定义 ...

  7. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  8. 使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术文章<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  9. C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案

    C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案 1.前言 2.安 ...

最新文章

  1. SQLServer 实现rownum 的功能
  2. Windows10+PicGo+七牛云+Typora搭建写作环境与图床
  3. 万字长文,一篇文章带你入门Python
  4. java工程转maven工程_Java工程转换为Maven工程
  5. Asp.net导出Excel报表(解决无网格问题)
  6. 中国内容推荐引擎市场趋势报告、技术动态创新及市场预测
  7. 《硅谷》大结局 :关上 AI 的潘多拉魔盒
  8. vs2015 安装破解版Visual Assist X
  9. iOS中播放音乐和音效
  10. api 二次 开发 禅道_二次开发机制 - 禅道开源版使用帮助 - 禅道开源项目管理软件...
  11. Uipath鼠标单击扩展教程
  12. 网络安全等级保护合规一览
  13. 论如何冲破小游戏流量变现的瓶颈?
  14. idea光标移至行尾快捷键——End键不能移至行尾的解决办法
  15. dspbios设计指南_视频广告设计者指南
  16. 解决 macbook m1 苹果笔记本电脑 关闭盖子 休眠
  17. JavaScript:实现给定一个句子,返回出现次数最多的单词算法(附完整源码)
  18. 实践:nginx代理,通过使用GeoIp模块获取访问者IP及访问地区信息
  19. ZUCC_Linux系统管理_实验七 LVM
  20. 基于SSM的学生信息管理系统

热门文章

  1. 华为网络设备上的常用安全技术(一)
  2. struts2中jsp页面上验证码的生成
  3. .NET 时间格式 ----------摘自MSDN
  4. iis php网站500错误原因_因为曾经错误安装过PHP5.2而导致IIS7无法正常工作,显示500错误提示,大家帮忙看看!...
  5. python线性回归算法简介_Python实现的简单线性回归算法实例分析
  6. php 解析xml 的四种方法(转)
  7. java 连接redis 以及基本操作
  8. linux程序调试命令strace
  9. 3-07. 求前缀表达式的值(25) (ZJU_PAT数学)
  10. 解决WP7的32位图像渐变色色阶问题