ASP.NET Core是一个跨平台、开源的框架,用于在Windows、Mac和Linux操作系统(OS)上开发web应用程序。你可以使用以下任何IDE开发ASP.NET Core 应用程序:
在这篇博文中,我们将学习如何如何将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中间件
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. } }
public static class MiddlewareExtension { public static IApplicationBuilder UseRedirectionHanlderMiddleware (this IApplicationBuilder applicationBuilder) { return applicationBuilder.UseMiddleware<RedirectionHandlerMiddleware>(); } }
app.MapWhen(context => context.Request.Path.ToString().EndsWith(".aspx"), appBuilder => { appBuilder.UseRedirectionHanlderMiddleware(); });
现在,我们已经完成了IHttpHandler的迁移。
将 IHttpModule迁移到ASP.NET Core中间件
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>"); } }
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>(); } }
// 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...