扩展IIS的两种方法:模块与处理程序。
  模块,类似于以前的IIS版本中的ISAPI筛选器,它参与每个请求处理。IIS中一些现成的模块包括身份验证模块(用于处理请求的身份验证状态),压缩模块(用于压缩返回响应)以及日志记录模块(用于将有关请求的信息记录到请求日志中)。模块是一个类,该类需要实现System.Web.IHttpModule接口,然后就可以使用System.Web中的API参与asp.net的请求处理。
  处理程序,类似于以前iis版本中的ISAPI扩展,负责处理请求并生成特定内容类型的响应。处理程序是一个.NET类,该类实现ASP.NET System.Web.IHttpHandler或System.Web.IHttpAsyncHandler接口,并使用System.Web命名空间中的API 为其支持的特定内容生成http响应。

  模块和处理程序之间的主要区别在于,处理程序通常映射到特定的请求路径或扩展名,并支持该路径或扩展名所对应的特定服务器资源的处理。如果要实现的功能是处理特定的url或扩展名则使用处理程序,否则使用模块。

模块示例:

    public class ZYAuthModule : IHttpModule
{
public void Dispose()
{
//throw new NotImplementedException();
} public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
} private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
var r = app.Context.Request;
var u = r.Url.AbsoluteUri;
//r.HttpMethod=="GET"
if (r.Cookies != null && !string.IsNullOrEmpty(r.Cookies.Get("ASP.NET_SessionId").Value))
{
var url = "https://auth.idscloud.com/idp/oauth2/authorize?" + $"redirect_uri={u}&state=10&client_id=&response_type=code";
app.Context.Response.Redirect(url);
}
}

处理程序示例:

 public class ZYAuthHandler : IHttpHandler
{
public bool IsReusable => true; public void ProcessRequest(HttpContext context)
{
DateTime dt;
String useUtc = context.Request.QueryString["utc"];
if (!String.IsNullOrEmpty(useUtc) &&
useUtc.Equals("true"))
{
dt = DateTime.UtcNow;
}
else
{
dt = DateTime.Now;
}
context.Response.Write(
String.Format("<h1>{0}</h1>",
dt.ToLongTimeString()
));
}
}

 将上面的程序编译成dll后放入目标站点的bin目录下,按照一下方式进行部署:

详细可参考微软文档:https://docs.microsoft.com/en-us/iis/develop/runtime-extensibility/developing-iis-modules-and-handlers-with-the-net-framework

使用.NET Framework开发IIS 7.0模块和处理程序拦截请求实现跳转的更多相关文章

  1. IIS 7.0 的 ASP.NET 应用程序生命周期概述(转载)

    IIS 7.0 的 ASP.NET 应用程序生命周期概述更新:2007 年 11 月本主题介绍在 IIS 7.0 集成模式下运行以及与 IIS 7.0 或更高版本一起运行的 ASP.NET 应用程序的 ...

  2. IIS 7.0的集成模式和经典模式

    IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式.经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库, 原先运行于IIS6.0下的Web应用程序迁移到IIS7 ...

  3. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  4. Local IIS 7.0 - CS0016: Could not write to output file / Microsoft.Net > Framework > v4.0.30319 > Temporary ASP.NET Files

    This week I went nuts over my local IIS. I have never swore to a machine that much in my whole life. ...

  5. isapi_rewrite运行在.net framework 4.0+iis 6.0环境下404错误解决方案

    今天以前的同事让我帮他上服务器看看,他把页面伪静态之后,出现404错误,为什么会出现这样的问题呢,仔细研究才发现,原因如下: 因为ASP.NET4.0在安装的过程中,已经在IIS6做了一些手脚,让它可 ...

  6. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用Spring Framework开发自己的应用程序

    1.直接基于spring framework开发自己的应用程序: 1.1参考资料: Spring官网spring-framework.4.3.5.RELAESE的Reference Documenta ...

  7. ASP.NET的运行原理与运行机制 如何:为 IIS 7.0 配置 <system.webServer> 节

    https://technet.microsoft.com/zh-cn/sysinternals/bb763179.aspx 当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的 ...

  8. Windows 8.1 IIS 8.5 远程管理 Windows 2008 R2 IIS 7.0

    案例: Windows 8.1 x64 IIS 8.5 inetmgr_amd64_v1.1_en-US.msi Windows 2008 R2  x64 IIS  7.0 在Win8.1 通过IIS ...

  9. 在Windows Service 2012上安装IIS 8.0 IIS 6

    我的目的是在服务器上安装IIS6 ,但是受到这边文章的启发和按照他的步骤,看到了"IIS 6管理兼容性",我的问题就决解了,我这里是因为要安装vss 2005 和u8等比较早期的软 ...

随机推荐

  1. XML文件解析之SAX解析

    使用DOM解析的时候是需要把文档的所有内容读入内存然后建立一个DOM树结构,然后通过DOM提供的接口来实现XML文件的解析,如果文件比较小的时候肯定是很方便的.但是如果是XML文件很大的话,那么这种方 ...

  2. m3u8系列(一)练手spider

    本次目标 http://www.qiqi.la/vod-detail-id-46194.html 目的,down魔道祖师,实现 前期分析文件得到以下粗略步骤 1 进入二级页面,找到 <ifram ...

  3. c# String常用方法

  4. select函数的详细使用(C语言)

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序( ...

  5. ASP.NET Core 2.0身份和角色管理入门

    见  https://blog.csdn.net/mzl87/article/details/84892916 https://www.codeproject.com/Articles/1235077 ...

  6. Java集合--Set架构

    前面,我们已经系统的对List和Map进行了学习.接下来,我们开始可以学习Set.相信经过Map的了解之后,学习Set会容易很多.毕竟,Set的实现类都是基于Map来实现的(HashSet是通过Has ...

  7. Python中的字典分组函数(groupby,itertools)

    from operator import itemgetter # itemgetter用来去dict中的key,省去了使用lambda函数 from itertools import groupby ...

  8. 调整swt table的行高

    table.addListener(SWT.MeasureItem, new Listener() { public void handleEvent(Event event) { // 设置行高度 ...

  9. Python 2--序列

  10. 003_软件安装之_Visual Studio 2012

    Visual Studio 2012安装,里面有视频教程,还有秘钥,连接失效联系我 2012版: 链接:https://pan.baidu.com/s/1BRE46cTKJW58YZ3lBFyjMw ...