测试用中间件
// 需要安装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/>