网站被k怎么办,网站建设背景分析论文,网站开发与应用案例,app首页图片.NET7的第三个预览版发布了#xff0c;同样带来了mini api的更新#xff0c;这次带来了路由过滤器#xff0c;与mvc版的action 过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-3/用官方的代码#xff0c;跑不起来同样带来了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 ValueTaskobject?(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 ValueTaskobject?(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 ValueTaskobject?(no is error!);}return next(context);};
});
//第三种方式
app.MapGet(/data3/{name}, GetData).AddFilterMyFilter();app.Run();public class MyFilter : IRouteHandlerFilter
{public ValueTaskobject? InvokeAsync(RouteHandlerInvocationContext context, RouteHandlerFilterDelegate next){var no (string?)context.Parameters[0];if (no ! null !no.StartsWith(NO)){return new ValueTaskobject?(no is error!);}return next(context);}
}public record Data
{public string No { get; set; }public string Name { get; set; }
}