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:\HMDemo\bin\
  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:\Windows\System32\inetsrv\appcmd.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:\Windows\System32\inetsrv\appcmd.exe set module $modules[$i].Name /lockItem:true
}

Test

Logon and the planned results as below

posted on 2016-01-12 17:41  Mark_Li  阅读(534)  评论(0编辑  收藏  举报

导航