测试用中间件

  // 需要安装Dynamic.Json
  // install-package Dynamic.Json

    public class CheckMiddleware
    {
        private RequestDelegate Next { get; init; }
        public CheckMiddleware(RequestDelegate next)
        {
            Next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            string password = context.Request.Query["password"];

            if (password == "123")
            {
                if (context.Request.HasJsonContentType())
                {
                    using (Stream stream = context.Request.BodyReader.AsStream())
                    {
                        dynamic dynamic = await DJson.ParseAsync(stream);
                        context.Items["BodyJson"] = dynamic;
                    }

                    await Next.Invoke(context);
                }
            }
            else
                context.Response.StatusCode = 401;
        }
    }

只对"/test"使用该中间件

app.Map("/test", pipebuilder =>
{
    pipebuilder.UseMiddleware<CheckMiddleware>();
    pipebuilder.Run(async context =>
    {
        object? obj = context.Items["BodyJson"];

        if (obj != null)
            await context.Response.WriteAsync($"body: {obj}");
        await context.Response.WriteAsync("Run<br/>");
    });
});

测试

POST https://localhost:7132/test?password=123 HTTP/1.1
content-type: application/json

{
    "name": "sample",
    "time": "Wed, 21 Oct 2015 18:27:50 GMT"
}
###

结果

HTTP/1.1 200 OK
Connection: close
Date: Tue, 15 Feb 2022 06:44:18 GMT
Server: Kestrel
Transfer-Encoding: chunked

body: {
    "name": "sample",
    "time": "Wed, 21 Oct 2015 18:27:50 GMT"
}Run<br/>