1. 定义中间内容
1.1 必须有一个RequestDelegate 委托用了进入一个中间件
1.2 通过构造函数设置这个RequestDelegate委托
1.3 必须有一个方法Task Invoke,在这个方法里编写中间件内容最后执行RequestDelegate委托
using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Haos.Develop.CoreTest { public class TestMiddleware { protected RequestDelegate Next; /// <summary> /// 参数 /// </summary> public string Str { get; set; } public TestMiddleware(RequestDelegate next,string s) { Next = next; Str = s; } public virtual Task Invoke(HttpContext context) { context.Response.WriteAsync("this is test string"); return Next(context); } } }
2. 编写一个扩展方法用来添加到程序中
using Haos.Develop.CoreTest.Service; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Haos.Develop.CoreTest { public static class Extension { public static IApplicationBuilder UserTestMiddleWare(this IApplicationBuilder app, string str) { return app.UseMiddleware<TestMiddleware>(str); } } }
3. 在Startup添加中间件
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //扩展方式添加 app.UserTestMiddleWare("this is test param"); //直接添加中间件方式 app.Use((context, next) => { context.Response.WriteAsync("this is test"); return next(); }); }