ASP.NET Core开发,开发并使用中间件(Middleware)。

中间件是被组装成一个应用程序管道来处理请求和响应的软件组件。

每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组分在管道中调用之后执行特定操作。

具体如图:

开发中间件(Middleware)

今天我们来实现一个记录ip 的中间件。

1.新建一个asp.net core项目,选择空的模板。

2.新建一个类: RequestIPMiddleware.cs

    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);}}

3.再新建一个:RequestIPExtensions.cs

    public static class RequestIPExtensions{public static IApplicationBuilder UseRequestIP(this IApplicationBuilder builder){return builder.UseMiddleware<RequestIPMiddleware>();}}

这样我们就编写好了一个中间件。

使用中间件(Middleware)

1.使用

在 Startup.cs 添加 app.UseRequestIP()

        public void Configure(IApplicationBuilder app, ILoggerFactory loggerfactory){loggerfactory.AddConsole(minLevel: LogLevel.Information);app.UseRequestIP();//使用中间件app.Run(async (context) =>{await context.Response.WriteAsync("Hello World!");});}

然后运行程序,我选择使用Kestrel 。

访问:http://localhost:5000/

成功运行。

二、Asp.Net Core使用中间件拦截处理请求

public class OuterImgMiddleware
{public static string RootPath { get; set; } //配置文件读取绝对位置private readonly RequestDelegate _next;public OuterImgMiddleware(RequestDelegate next, IHostingEnvironment env){//  _wwwrootFolder = env.WebRootPath;_next = next;}public async Task Invoke(HttpContext context){var path = context.Request.Path.ToString();var headersDictionary = context.Request.Headers;if (context.Request.Method == "GET")if (!string.IsNullOrEmpty(path) && path.Contains("/upload/logo")){//var unauthorizedImagePath = Path.Combine(RootPath, path);var unauthorizedImagePath = RootPath + path;await context.Response.SendFileAsync(unauthorizedImagePath);return;}await _next(context);}
}

public static class MvcExtensions
{public static IApplicationBuilder UseOutImg(this IApplicationBuilder builder){return builder.UseMiddleware<OuterImgMiddleware>();}
}

同上在Configure()中注册使用就可以了。

更多:

Asp.Net Core 通过自定义中间件防止图片盗链的实例(转)

在ASP.NET Core2.0中使用百度在线编辑器UEditor(转)

Asp.Net Core WebAPI入门整理(四)参数获取

ASP.NET Core -中间件(Middleware)使用相关推荐

  1. ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

    ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...

  2. ASP.NET Core 中间件Diagnostics使用

    ASP.NET Core 中间件(Middleware)Diagnostics使用.对于中间件的介绍可以查看之前的文章ASP.NET Core 开发-中间件(Middleware). Diagnost ...

  3. ASP.NET Core 中间件(Middleware)详解

    ASP.NET Core 中间件(Middleware)详解 原文:ASP.NET Core 中间件(Middleware)详解 本文为官方文档译文,官方文档现已非机器翻译 https://docs. ...

  4. ASP.NET Core中间件初始化探究

    前言 在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,ASP.NET Core默认也为我们内置了许多的中间件,甚至有时候我们需要自定义中间件来帮我们处理一些请求管道 ...

  5. ASP.NET Core 中间件

    1.前言 中间件(middleware)是一种装配到应用管道以处理请求和响应的组件.每个组件: ●可选择是否将请求传递到管道中的下一个组件. ●可在管道中的下一个组件前后执行工作. 请求委托(requ ...

  6. 利用Asp.Net Core的MiddleWare思想处理复杂业务流程

    最近利用Asp.Net Core 的MiddleWare思想对公司的古老代码进行重构,在这里把我的设计思路分享出来,希望对大家处理复杂的流程业务能有所帮助. 背景 一个流程初始化接口,接口中根据传入的 ...

  7. 如何一秒钟从头构建一个 ASP.NET Core 中间件

    前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...

  8. 在ASP.NET Core使用Middleware模拟Custom Error Page功能

    一.使用场景 在传统的ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAtt ...

  9. ASP.NET Core 中间件分类

    ASP.NET Core 中间件的配置方法可以分为以上三种,对应的Helper方法分别是:Run(), Use(), Map(). Run(),使用Run调用中间件的时候,会直接返回一个响应,所以后续 ...

最新文章

  1. yield - python
  2. android8.1状态栏图标,Android 8.1 去掉 Launcher3 默认给 icon 增加的白边
  3. 输入这是我的第一个python程序_「vs2017」vs2017 开始自己的第一个Python程序 - seo实验室...
  4. 计算机漏洞为什么无法避免,雷电3接口漏洞影响数百万计算机:5分钟解锁设备,无法修复...
  5. Idea 中图片资源无法加载问题
  6. 学历查询和专业代码查询
  7. 强网杯 2018 core ROP做法
  8. springboot发送邮件(QQ邮箱)
  9. AJAX+Servlet实现客户端无刷新请求服务器实践
  10. 工业交换机的内部组成是什么?
  11. flexbison编写语法分析器
  12. 反馈仅与输入量有关及深度负反馈的理解
  13. 使用pe安装系统windows系统
  14. DL4J实战之二:鸢尾花分类
  15. 没人能拒绝可爱的鲨鱼
  16. 主线剧情07.3-Linux驱动编程-内核态API总结备查
  17. 使用selenium将网页保存为MHTML格式
  18. 分享 嵌入式DVR怎样做远程监控
  19. 流计算风云再起 - PostgreSQL携PipelineDB力挺IoT(物联网)
  20. IE下使用js调用阅读插件调用二代证阅读器读取身份证信息

热门文章

  1. visual studio 不能创建biztalk 项目
  2. UA OPTI544 量子光学14 量子电动力学基础
  3. Bing地图REST服务
  4. 浏览器开发人员工具使用初步图解
  5. BZOJ 1867 [Noi1999]钉子和小球 DP
  6. 添加服务引用的本质是什么?
  7. 秩、标量、矢量、矩阵
  8. 【LNOI2014】【BZOJ3626】NOIp2018模拟(三) LCA
  9. Fragment 生命周期的详情
  10. 白书P61 - 点集配对问题