zoukankan      html  css  js  c++  java
  • 使用.NET Framework开发IIS 7.0模块和处理程序拦截请求实现跳转

      扩展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

  • 相关阅读:
    【案例】图片上传
    BOM相关知识点
    【案例】图片无缝轮播效果
    DOM相关知识点
    【案例】雪花飘落效果
    DOM节点克隆
    DOM节点的创建、插入、删除
    【案例】列表全选、全不选、反选
    AJAX相关概念及应用
    解决跨域问题
  • 原文地址:https://www.cnblogs.com/xienb/p/11765506.html
Copyright © 2011-2022 走看看