备忘asp.net core使用中间件实现IP白名单访问

1、**添加中间件MiddleWare**

 1  public class MyMiddleware
 2     {
 3         private readonly RequestDelegate _next;
 4         private readonly ILogger<MyMiddleware> _logger;
 5         private readonly string _safelist;
 6         public MyMiddleware(RequestDelegate next, ILogger<MyMiddleware> logger, string safelist)
 7         {
 8             _safelist = safelist;
 9             _next = next;
10             _logger = logger;
11         }
12         public async Task Invoke(HttpContext context)
13         {
14             var remoteIp = context.Connection.RemoteIpAddress;
15             FileStream fs = new FileStream("ip.txt", FileMode.OpenOrCreate);
16             //获得字节数组
17             byte[] data = System.Text.Encoding.Default.GetBytes(DateTime.Now + "ip" + ":" + remoteIp);
18             //开始写入
19             fs.Write(data, 0, data.Length);
20             //清空缓冲区、关闭流
21             fs.Flush();
22             fs.Close();
23             _logger.LogDebug("Request from Remote IP address: {RemoteIp}", remoteIp);
24             string[] ip = _safelist.Split(';');
25             var bytes = remoteIp.GetAddressBytes(); var badIp = true;
26             for (int i = 0; i < ip.Length; i++)
27 
28             {
29                 var testIp = IPAddress.Parse(ip[i]);
30                 if (testIp.GetAddressBytes().SequenceEqual(bytes))
31                 { badIp = false; break; }
32             }
33             if (badIp)
34             {
35                 _logger.LogWarning($"Forbidden Request from Remote IP address: {remoteIp}");
36                 context.Response.StatusCode = StatusCodes.Status403Forbidden;
37                 await context.Response.WriteAsync($"Forbidden Request from Remote IP address: {remoteIp}");
38 
39                 return;
40             }
41             await _next.Invoke(context);
42         }
43     }

2.**在statr up中使用中间件(可以将IP地址放在appsetting.json中多个ip使用";"分隔)** 

 1 app.UseMiddleware(Configuration["WhiteIPList"]);