zoukankan      html  css  js  c++  java
  • .NET Core 中间件

    中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:

      1.选择是否将请求传递到管道中的下一个组件。

      2.可在管道中的下一个组件前后执行工作。

    请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。
    使用 RunMap 和 Use 扩展方法来配置请求委托。 可将一个单独的请求委托并行指定为匿名方法(称为并行中间件),或在可重用的类中对其进行定义。 这些可重用的类和并行匿名方法即为中间件,也叫中间件组件。 请求管道中的每个中间件组件负责调用管道中的下一个组件,或使管道短路。

    使用 IApplicationBuilder 创建中间件管道

    ASP.NET Core 请求管道包含一系列请求委托,依次调用。 下图演示了这一概念。 沿黑色箭头执行。


    每个委托均可在下一个委托前后执行操作。 此外,委托还可以决定不将请求传递给下一个委托,这就是对请求管道进行短路。 通常需要短路,因为这样可以避免不必要的工作。 例如,静态文件中间件可以返回静态文件请求并使管道的其余部分短路。 先在管道中调用异常处理委托,以便它们可以捕获在管道的后期阶段所发生的异常。

    新建一个类RequestIPMiddleware获取ip地址

    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Logging;
    
    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 context.Response.WriteAsync("IP----->"+context.Connection.RemoteIpAddress.ToString() +"
    ");
            await _next.Invoke(context);
        }
    
    }
    View Code

    创建类RequestIPExtensions

    using Microsoft.AspNetCore.Builder;
    
    public static class RequestIPExtensions
    {
        public static IApplicationBuilder UseRequestIP(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestIPMiddleware>();
        }
    }
    View Code

    然后在Startup类中的Configure方法中调用

     loggerfactory.AddConsole(minLevel: LogLevel.Information);
     app.UseRequestIP(); //使用Ip中间件
     app.Run(async context =>{
           await context.Response.WriteAsync("Hello world !");
      });

    参考 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.1

  • 相关阅读:
    div里面的内容超出自身高度时,显示省略号
    CSS文本超出2行就隐藏并且显示省略号
    CSS中可以和不可以继承的属性
    return false
    CSS position: absolute、relative定位问题详解
    逆FizzBuzz问题求最短序列
    HTTP协议篇(一):多路复用、数据流
    PHP正则式PCRE
    Docker笔记三:基于LVS DR模式构建WEB服务集群
    架构设计之防止或缓解雪崩效应
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/10348878.html
Copyright © 2011-2022 走看看