如何将IHttpHandler和IHttpModule迁移到ASP.NET Core中间件
首页 专栏 后端 文章详情
0
头图

如何将IHttpHandler和IHttpModule迁移到ASP.NET Core中间件

码农驿站 发布于 今天 00:53

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中间件

使用如下代码创建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.
 }
}
在ApplicationBuilder中创建一个扩展方法,以在请求管道中使用RedirectionHandlerMiddleware。 然后,为扩展方法创建一个名为MiddlewareExtension的类,并在其中使用以下代码。​​​​​​​
public static class MiddlewareExtension     
{
     public static IApplicationBuilder UseRedirectionHanlderMiddleware
                   (this IApplicationBuilder applicationBuilder)
     {
         return applicationBuilder.UseMiddleware<RedirectionHandlerMiddleware>();
     }
}
我们需要在Startup.cs文件中包含下一个代码。
app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),
        appBuilder => {
            appBuilder.UseRedirectionHanlderMiddleware();
         });

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

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

使用如下代码创建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>");
       }
 }
与之前一样,我们需要添加一个扩展方法用来在请求管道中添加中间件。 然后,向现有的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>();
    }
}
然后,将中间件包含在Startup.cs文件中。​​​​​​​
// For Module
app.UseIPRestrictionModuleMiddleware();
 
 // For Handler
app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),
        appBuilder => {
                appBuilder.UseRedirectionHanlderMiddleware();
         });

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

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

c# asp.net 后端
阅读 16 发布于 今天 00:53
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
码农驿站

软件领域外文翻译,欢迎指正,如果有想要翻译文章,可以留言给我呦!

11 声望
1 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
码农驿站

软件领域外文翻译,欢迎指正,如果有想要翻译文章,可以留言给我呦!

11 声望
1 粉丝
关注作者
宣传栏
目录

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中间件

使用如下代码创建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.
 }
}
在ApplicationBuilder中创建一个扩展方法,以在请求管道中使用RedirectionHandlerMiddleware。 然后,为扩展方法创建一个名为MiddlewareExtension的类,并在其中使用以下代码。​​​​​​​
public static class MiddlewareExtension     
{
     public static IApplicationBuilder UseRedirectionHanlderMiddleware
                   (this IApplicationBuilder applicationBuilder)
     {
         return applicationBuilder.UseMiddleware<RedirectionHandlerMiddleware>();
     }
}
我们需要在Startup.cs文件中包含下一个代码。
app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),
        appBuilder => {
            appBuilder.UseRedirectionHanlderMiddleware();
         });

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

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

使用如下代码创建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>");
       }
 }
与之前一样,我们需要添加一个扩展方法用来在请求管道中添加中间件。 然后,向现有的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>();
    }
}
然后,将中间件包含在Startup.cs文件中。​​​​​​​
// For Module
app.UseIPRestrictionModuleMiddleware();
 
 // For Handler
app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"),
        appBuilder => {
                appBuilder.UseRedirectionHanlderMiddleware();
         });

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

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