新建一个ASP.NET Core Web Application 项目选中空模板
然后为项目添加一个Microsoft.Extensions.Logging.Console
由于我用的.net core1.1 则选择对应1.1版本
添加好了以后新建一个类RequestIPMiddleware.cs
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace xzyCore
{
public class RequestIPMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public RequestIPMiddleware(RequestDelegate next, ILoggerFactory loggerFactory) {
_next = next;
_logger =loggerFactory.CreateLogger<RequestIPMiddleware>();
}
public async Task Invoke(HttpContext context) {
_logger.LogInformation("User IP:" + context.Connection.RemoteIpAddress.ToString());
await _next.Invoke(context);
}
}
}
然后在创建一个RequestIPExtensions.cs
using Microsoft.AspNetCore.Builder;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace xzyCore
{
public static class RequestIPExtensions
{
public static IApplicationBuilder UseRequestIP(this IApplicationBuilder builder) {
return builder.UseMiddleware<RequestIPMiddleware>();
}
}
}
这样就编写好一个中间件了。
在Startup.cs中添加app.UseRequestIP();
// This method gets called by the runtime. Use this
method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
app.UseRequestIP();
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello
World!");
});
}
然后在运行程序
成功运行,这里我们还可以对这个中间件进行进一步改进,增加更多的功能,如限制访问等。