.NET7之MiniAPI(特别篇):.NET7 Preview3

2023-11-05 18:38

本文主要是介绍.NET7之MiniAPI(特别篇):.NET7 Preview3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

.NET7的第三个预览版发布了,同样带来了mini api的更新,这次带来了路由过滤器,与mvc版的action 过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-3/

用官方的代码,跑不起来,这样那样的问题,比如下面的代码,直接报空引用的异常。

app.MapGet("/data0/{no}", (string no) =>
{Console.WriteLine($"Get方法中:no={no}");return new Data { No = no, Name = "test" + DateTime.Now };}).AddFilter((RouteHandlerInvocationContext context, RouteHandlerFilterDelegate next) =>{var no = (string?)context.Parameters[0];Console.WriteLine($"Get方法前:no={no}");if (no != null && !no.StartsWith("NO")){return new ValueTask<object?>("no is error!");}var result = next(context);if (result.IsCompleted){Console.WriteLine($"Get方法后:结果={result.Result}");}return result;});

经过一阵折腾,终于正常的跑了起来,需要把map的方法独立出来写才可以。同时这里使用了三种方式来使用过滤器,换汤不换药,本质一样。

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();Data GetData(string no)
{Console.WriteLine($"Get方法中:no={no}");return new Data { No = no, Name = "test" + DateTime.Now };
};
//第一种方式
app.MapGet("/data1/{no}", GetData).AddFilter((RouteHandlerInvocationContext context, RouteHandlerFilterDelegate next) =>{var no = (string?)context.Parameters[0];Console.WriteLine($"Get方法前:no={no}");if (no != null && !no.StartsWith("NO")){return new ValueTask<object?>("no is error!");}var result = next(context);if (result.IsCompleted){Console.WriteLine($"Get方法后:结果={result.Result}");}return result;});string AddTest(Data data)
{Console.WriteLine($"Post方法中:no={data.No}");return "OK";
}
app.MapPost("/data1", AddTest).AddFilter((RouteHandlerInvocationContext context, RouteHandlerFilterDelegate next) =>{var data = (Data?)context.Parameters[0];Console.WriteLine($"Post方法前:data={data}");var result = next(context);if (result.IsCompleted){Console.WriteLine($"Post方法后:结果={result.Result}");}return result;});
//第二种方式
app.MapGet("/data2/{no}", GetData)
.AddFilter((RouteHandlerContext routeHandlerContext, RouteHandlerFilterDelegate next) =>
{return (context) =>{var no = (string?)context.Parameters[0];if (no != null && !no.StartsWith("NO")){return new ValueTask<object?>("no is error!");}return next(context);};
});
//第三种方式
app.MapGet("/data3/{name}", GetData).AddFilter<MyFilter>();app.Run();public class MyFilter : IRouteHandlerFilter
{public ValueTask<object?> InvokeAsync(RouteHandlerInvocationContext context, RouteHandlerFilterDelegate next){var no = (string?)context.Parameters[0];if (no != null && !no.StartsWith("NO")){return new ValueTask<object?>("no is error!");}return next(context);}
}public record Data
{public string No { get; set; }public string Name { get; set; }
}

这篇关于.NET7之MiniAPI(特别篇):.NET7 Preview3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351754

相关文章

【跟我学RISC-V】(三)openEuler特别篇

写在前面 这篇文章是跟我学RISC-V指令集的第三期,距离我上一次发文已经过去一个多月了,在这个月里我加入了oerv的实习项目组,并且还要准备期末考试,比较忙。 在这篇文章里我会隆重、详细地介绍一个对RISC-V支持非常友好的Linux发行版,同时也是国产操作系统 — openEuler.在此之前我都是使用我最熟悉的Fedora,在x86上Fedora确实非常好用、体验好,但是在RISC-V上总

网络安全从入门到精通(特别篇I):应急响应之不同平台后门排查思路

Windows-后门-常规&权限维持&内存马 Linux-后门-常规&权限维持&Rootkit&内存马 Windows实验 1、常规MSF后门-分析检测 2、权限维持后门-分析检测 3、Web程序内存马-分析检测 常见工具集合: https://mp.weixin.qq.com/s/L3Lv06bFdUX_ZE4rS69aDg 常规后门: msfvenom -p windows/meter

网络安全从入门到精通(特别篇I):应急响应之网站入侵排查思路

蓝队应急响应实战 1. 应急响应-网站入侵-基础知识2. 应急响应-网站入侵-技能掌握3. 应急响应-网站入侵-案例分析3.1 网站入侵-排查思路-首要任务3.2 IIS&.NET-注入-基于时间配合日志分析3.3 Apache&PHP-漏洞-基于漏洞配合日志分析3.4 Tomcat&JSP-弱口令-基于后门配合日志分析3.5 Webshell查杀-常规后门&内存马-各脚本&各工具

net7部署经历

1、linux安装dotnet命令: sudo yum install dotnet-sdk-7.0  或者直接在商店里安装 2、配置反向代理 127.0.0.1:5000=》localhost 访问后报错 原因:数据表驼峰名, 在windows的数据表不区分大小写,但是在linux里面是默认区分的, 解决方案 : linux的mysql区分大小写,windows不区

BootstrapAdmin Net7:基于RBAC的后台管理框架,实现精细化权限管理与多站点单点登录

BootstrapAdmin Net7:基于RBAC的后台管理框架,实现精细化权限管理与多站点单点登录 摘要 随着企业信息化建设的不断深入,后台管理系统在企业运营中扮演着越来越重要的角色。本文介绍了一款基于RBAC(Role-Based Access Control)的BootstrapAdmin Net7后台管理框架,该框架支持前后台分离、多站点单点登录,并兼容所有主流浏览器。通过内置微信、支

网络安全从入门到精通(特别篇I):Windows安全事件应急响应之Windows应急响应基础必备技能

Windows应急 询问攻击情况范围 事件发生时的状况或安全设备告警等,能帮助应急处置人员快速分析确定事件类型,方便前期准备。 通用排查思路 入侵肯定会留下痕迹,另外重点强调的是不要一上来就各种查查查,问清楚谁在什么时间发现的主机异常情况,异常的现象是什么,受害用户做了什么样的紧急处理。问清楚主机异常情况后,需要动脑考虑为什么会产生某种异常,从现象反推可能的入侵思路,再考虑会在 Windo

2024龙年特别篇 -- 魔法指针 之 数组名的理解

你是否为不理解关于指针数组名而焦虑,听说该博主白子寰讲得很详细喔  目录 指针的数组名 VS &数组名 ①段代码  ②段代码 小结 指针访问数组 指针的数组名 VS &数组名 我们先来看下段简单的代码 ①段代码 int main(){int arr[10] = { 0 };printf("%p\n", &arr);printf("%p\n", &arr

2024龙年特别篇 -- 魔法指针 之 指针变量的意义 指针运算

学习完指针变量:链接后, 我们继续学习指针变量的应用  目录 程序展示 原始方式  指针变量方式  代码对比 指针运算 指针+-整数 用指针打印数组内容 使用指针打印1-10中的奇数  指针-指针 指针的关系运算    程序展示 打印一个有10个元素的数组,将其全置为1 原始方式  int main(){int arr[10] = { 0

2024龙年特别篇 -- 魔法指针 之 指针开篇

你是否为 指针,指针变量,const修饰指针,野指针而感到困惑和不理解,接下来就让白子寰同学为你详细讲解!!!     注:该文章图片引用了小hong书博主:@IT局内人 目录 指针 概念  计算机常见单位转换 指针变量 一段代码解释清楚指针变量 一图 KO 理解指针类型   解引用操作符(*) const修饰指针 const修饰变量 const修饰指针变

我的创作纪念日【特别篇】--【文件上传漏洞(三)】-lab 11-lab19

文件上传漏洞——upload-labs 1-19 文章目录 文件上传漏洞——upload-labs 1-19lab 11、%00截断绕过(GET)源码分析检测方法绕过方法抓包上传 lab 12、%00截断绕过(二)(POST)源码审计 lab 13、图片马绕过源码分析相关函数 图片马什么是图片马如何制作图片马 绕过非法 lab 14、getimagesize图片类型绕过查看源码相关函数制作