ASP.NET Core是一个跨平台、开源的框架,用于在Windows、Mac和Linux操作系统(OS)上开发web应用程序。你可以使用以下任何IDE开发ASP.NET Core 应用程序:

  • Visual Studio
  • Visual Studio for Mac
  • Visual Studio Code

在这篇博文中,我们将学习如何如何将asp.net IHttpHandler和IHttpModule迁移到ASP.NET Core中间件并提供代码示例。

让我们开始吧!

ASP.NET IHttpHandler

在ASP.NET应用程序中,HTTP处理程序是一个进程,它在对向web服务器的每个响应上执行。我们可以创建自己的自定义HTTP处理程序。

下面是将所有.aspx页重定向到一个新页的代码。

public class RedirectionHandler : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
var response = context.Response;
response.Write("<p>Process files with .aspx extension</p>");
// Any redirection logic can be written here.
}
}

web.config中添加如下代码:

<add name="RedirectionHandler" verb="*" path="*.aspx" type="MyWebApplication.RedirectionHandler" resourceType="Unspecified"/>

ASP.NET IHTTPModule

IHttpModule还将在应用程序的每个请求的HTTP处理程序执行之前和之后。它们帮助我们验证传入和传出的请求并修改它们。

下面是用于根据用户的IP地址限制用户的IHttpModule代码。

public class IPRestrictionModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += (source, arguments) =>
{
var application = (HttpApplication)source;
var beginContext = application.Context;
beginContext.Response.Write("<p>Restrict Users based on IP</p>"); // Code logic comes here.
}; context.EndRequest += (source, arguments) =>
{
var application = (HttpApplication)source;
var endContext = application.Context;
endContext.Response.Write("<p>Request ended.</p>");
};
}
}

web.config中添加如下代码:

<add name="RestrictionModule" type=" MyWebApplication.IPRestrictionModule" />

ASP.NET Core中间件

在ASP.NET Core应用程序中,中间件组件将替换IHttpHandler和IHttpModule。它是针对每个请求执行的组件。我们可以使用IApplicationBuilder接口在Startup类的Configure方法中添加中间件。

可以使用以下四种方法:

Run

终止HTTP管道。

Use

将中间件添加到请求管道。

Map

根据请求路径匹配请求委托

MapWhen

支持基于谓词的中间件分支。

让我们看看如何将ASP.NET IHttpHandler和IHttpModule迁移到ASP.NET Core中间件!

将 IHttpHandler迁移到ASP.NET Core中间件

1. 使用如下代码创建RedirectionHandlerMiddleware 类​​​​​​​

public class RedirectionHandlerMiddleware
{
private RequestDelegate _next;
public RedirectionHandlerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
await context.Response.WriteAsync("<p>Process files with .aspx extension</p>");
// Any Redirection logic can be return here.
}
}

2. 在ApplicationBuilder中创建一个扩展方法,以在请求管道中使用RedirectionHandlerMiddleware。

3. 然后,为扩展方法创建一个名为MiddlewareExtension的类,并在其中使用以下代码。​​​​​​​

public static class MiddlewareExtension
{
public static IApplicationBuilder UseRedirectionHanlderMiddleware
(this IApplicationBuilder applicationBuilder)
{
return applicationBuilder.UseMiddleware<RedirectionHandlerMiddleware>();
}
}

4. 我们需要在Startup.cs文件中包含下一个代码。

app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),
appBuilder => {
appBuilder.UseRedirectionHanlderMiddleware();
});

​​​​​​​现在,我们已经完成了IHttpHandler的迁移。

将 IHttpModule迁移到ASP.NET Core中间件

1. 使用如下代码创建IPRestrictionModuleMiddleware类。​​​​​​​

public class IPRestrictionModuleMiddleware
{
private RequestDelegate _next;
public IPRestrictionModuleMiddleware (RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
await context.Response.WriteAsync("<p>Begin request</p>");
await _next.Invoke(context);
await context.Response.WriteAsync("<p>End request</p>");
}
}

2. 与之前一样,我们需要添加一个扩展方法用来在请求管道中添加中间件。

3. 然后,向现有的MiddlewareExtension类中添加以下代码:​​​​​​​

public static class MiddlewareExtensions
{
public static IApplicationBuilder UseRedirectionHanlderMiddleware
(this IApplicationBuilder applicationBuilder)
{
return applicationBuilder.UseMiddleware<RedirectionHandlerMiddleware>();
} public static IApplicationBuilder UseIPRestrictionModuleMiddleware
(this IApplicationBuilder builder)
{
return builder.UseMiddleware<IPRestrictionModuleMiddleware>();
}
}

4. 然后,将中间件包含在Startup.cs文件中。​​​​​​​

// For Module
app.UseIPRestrictionModuleMiddleware(); // For Handler
app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),
appBuilder => {
appBuilder.UseRedirectionHanlderMiddleware();
});

这样,我们就完成了对IHttpModule的迁移。

原文链接:https://www.syncfusion.com/blogs/post/how-to-migrate-asp-net-http-handlers-and-modules-to-asp-net-core-middleware.aspx

如何将IHttpHandler和IHttpModule迁移到ASP.NET Core中间件的更多相关文章

  1. ASP.NET Core 中间件 自定义全局异常中间件以及 MVC异常过滤器作用

    中间件是一种装配到应用管道以处理请求和响应的软件. 每个组件: 选择是否将请求传递到管道中的下一个组件. 可在管道中的下一个组件前后执行工作. 请求委托用于生成请求管道. 请求委托处理每个 HTTP ...

  2. 为什么你需要将代码迁移到ASP.NET Core 2.0?

    随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...

  3. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...

  4. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...

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

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

  6. ASP.NET Core 中间件Diagnostics使用 异常和错误信息

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

  7. [转帖]ASP.NET Core 中间件(Middleware)详解

    ASP.NET Core 中间件(Middleware)详解   本文为官方文档译文,官方文档现已非机器翻译 https://docs.microsoft.com/zh-cn/aspnet/core/ ...

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

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

  9. [转]ASP.NET Core 中间件详解及项目实战

    本文转自:http://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际 ...

随机推荐

  1. Python基础随笔①(MOOC)

    @ 目录 前言 概述 主体 1.基本语法元素 ①实例:温度转换 要求 分析 代码部分 运行结果 ②作业:Hello World的条件输出 要求 分析 代码 运行结果 ③作业:数值运算 要求 分析 代码 ...

  2. E - E(最短路解决源点到多点,多点到源点的和(有向图))

    问从1号点到各个点的距离+各个点到1号点之间的距离和的最小值 详解键连接https://www.cnblogs.com/csx-zzh/p/13411588.html In the age of te ...

  3. Codeforces Round #651 (Div. 2) B. GCD Compression(数论)

    题目链接:https://codeforces.com/contest/1370/problem/B 题意 给出 $2n$ 个数,选出 $2n - 2$ 个数,使得它们的 $gcd > 1$ . ...

  4. hdu 6863 Isomorphic Strings 哈希+求公因子

    题意: t组输入,每组数据输入一个整数n,代表字符串长度.下面再输入一个字符串 你需要判断这个字符串能不能分成大于1段,且这些段的最小表示法是一样的 例如:abccab,它可以分成2段,分别是abc和 ...

  5. HDU-6290 奢侈的旅行 (Dijkstra+堆优化)

    高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有nn个城镇,编号依次为11到nn.这些城镇之间有mm条单向道路,第ii 条单项道路包含四个参数ui,vi,ai,biu ...

  6. Codeforces Round #670 (Div. 2) C. Link Cut Centroids (dfs,树)

    C. Link Cut Centroids Fishing Prince loves trees, and he especially loves trees with only one centro ...

  7. .Net Core 国际化

    创建项目什么的就不说了吧 直接进入正题吧 我这里建的是个webapi 添加资源文件 1.首先我们创建一个Language文件夹,这就是我们在后面Startup类中需要配置的目录名. 2.然后我们在La ...

  8. shapefile 输出的地理处理注意事项(转载)

    来源:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//005600000013000000 多年来,Esri 为存储地理信息 ...

  9. leetcode32 最长游戏括号 dp

    有一说一,我觉得这题没有到困难级 要保存之前的状态,感觉是很明显的dp 思路和题解一样 class Solution { public: int longestValidParentheses(str ...

  10. 鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)

    ******************第五章学习****************** 1.[重要的三个概念] 1).文件拥有者(使用者):User,该文件/文件夹只能我来读写: 2).群组:Group, ...