• IIS Handler and Module探索


    Create Handler & Module

    1. Run the Visual Studio
    2. Create a Class Library “HMHandler” --> Change the class to HMHandler.cs
    3. Create a Class Library “HMModule” --> Change the class to HMModule.cs
    4. Create an ASP.NET Web Application “HMDemo” --> Add a Default.aspx page, to test the handler and module, remember the physical path of the site. (e.g. D:HMDemo)

    The structure of solution as below

    1. Add code in HMHandler.cs as below

    using System;
    
    using System.Web;
    
    namespace HMHandler
    {
        public class HMHandler : IHttpHandler
        {
            public bool IsReusable
            {
                get
                {
                    return 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()
                               ));
            }
        }
    }

    2. Update the code in HMModule

    using System;
    
    using System.Text;
    
    using System.Web;
    
    namespace HMModule
    
    {
        public class HMModule : IHttpModule
    
        {
            public void Dispose()
            {
                //throw new NotImplementedException();
            }
    
            public void Init(HttpApplication context)
            {
                context.AuthenticateRequest += Context_AuthenticateRequest;
            }
    
            private void Context_AuthenticateRequest(object sender, EventArgs e)
            {
                try
                {
                    //Get http application
    
                    HttpApplication app = sender as HttpApplication;
    
                    //Get authorization
    
                    var authorization = app.Request.Headers["Authorization"];
    
                    //Remove the "Basic "
    
                    var authChar = authorization.Remove(0, 6);
    
                    var authBytes = Convert.FromBase64String(authChar);
    
                    var authString = Encoding.UTF8.GetString(authBytes);
    
      //Reset the authorization
    
                    app.Request.Headers.Set("Authorization", "Basic YWR2ZW50XHNmZW5nOk1lbmcxMjMkJV4=");
    
                    app.Response.Write("<h1>Module_Authentication is passed</h1>");
                }
                catch (Exception)
                {
     
                }
            }
        }
    }

    3. Update the Defualt.aspx.cs

    using System;
    
    namespace HMDemo
    {
        public partial class Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write("hello from default page</br>");
            }
        }
    }

    4. Update the web.config as below

    <?xml version="1.0"?>
    
    <!--
    
      For more information on how to configure your ASP.NET application, please visit
    
      http://go.microsoft.com/fwlink/?LinkId=169433
    
      -->
    
    <configuration>
    
      <system.web>
    
        <compilation debug="true" targetFramework="4.6"/>
    
      </system.web>
    
      <system.webServer>
    
        <handlers accessPolicy="Read, Execute, Script">
    
          <add name="HMHandler" path="*.dll" verb="*" type="HMHandler.HMHandler" resourceType="File" requireAccess="Execute" preCondition="integratedMode"/>
    
        </handlers>
    
        <modules>
    
          <add name="HMModule" type="HMModule.HMModule" />
    
        </modules>
    
      </system.webServer>
    
    </configuration>
    1. Build the solution
    2. Run the Internet Information Services (IIS) Manager
    3. Add a website which Site name is Default Web Site
    4. Physical path is the HMDemo path (eg. D:HMDemo)
    5. Make sure the managed Pipeline Mode of Default Web Site application pool is Integrated
    6. Copy the scripts folder to D:HMDemo
    7. Copy the HMModule.dll and HMHandler.dll to D:HMDemoin
    8. Add IIS_USRS full control to Default Web Site
    9. Run ConfigModules.ps1
    10. Default Web Site --> Handler Mappings Edit Feature Permissions --> Check “Excute”
    11. Default Web Site
    12. Run Windows PowerShell as Administrator
    13. Input Set-ExecutionPolicy RemoteSigned and press <Enter>
    14. Press <Y>
    15. Close Windows PowerShell
    16. Run Windows PowerShell Modules as Administrator

    Build IIS

    Unlock Web Global Modules

    In Windows Server 2008 r2

    $modules = Get-WebGlobalModule
    
    $modules
    
    $count = $modules.Count
    
    for($i=1;$i -le $count; $i++)
    {
        C:WindowsSystem32inetsrvappcmd.exe set module $modules[$i].Name /lockItem:true
    }

    In Windows Server 2012 r2

    1. Run Windows PowerShell as Administrator
    2. Run the ConfigModules.ps1"
    Get Web Global Modules"
    $modules = Get-WebGlobalModule
    
    $modules
    
    $count = $modules.Count
    
    for($i=1;$i -le $count; $i++)
    {
        C:WindowsSystem32inetsrvappcmd.exe set module $modules[$i].Name /lockItem:true
    }

    Test

    Logon and the planned results as below

  • 相关阅读:
    SpringBoot2.x 工作流开源项目
    Nginx:终于有人把 Nginx 说清楚了,图文详解!
    MySQL8配置修改:Mysql group by this is incompatible with sql_mode=only_full_group_by
    解决错误:java.sql.SQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
    工作时使用的vim配置
    工作笔记整理
    Linux mint启用内核转储
    usleep和sleep
    gdb使用
    掩码配置为255.255.255.255
  • 原文地址:https://www.cnblogs.com/limark/p/5125118.html
Copyright © 2020-2023  润新知