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. }}
  1. 在ApplicationBuilder中创立一个扩大办法,以在申请管道中应用RedirectionHandlerMiddleware。
  2. 而后,为扩大办法创立一个名为MiddlewareExtension的类,并在其中应用以下代码。
public static class MiddlewareExtension     {     public static IApplicationBuilder UseRedirectionHanlderMiddleware                   (this IApplicationBuilder applicationBuilder)     {         return applicationBuilder.UseMiddleware<RedirectionHandlerMiddleware>();     }}
  1. 咱们须要在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>");       } }
  1. 与之前一样,咱们须要增加一个扩大办法用来在申请管道中增加中间件。
  2. 而后,向现有的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>();    }}
  1. 而后,将中间件蕴含在Startup.cs文件中。
// For Moduleapp.UseIPRestrictionModuleMiddleware();  // For Handlerapp.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),        appBuilder => {                appBuilder.UseRedirectionHanlderMiddleware();         });

这样,咱们就实现了对IHttpModule的迁徙。

原文链接:https://www.red-gate.com/simp...