ASP.NETのIHttpModule IHTTPハンドラIHttpHandlerFactoryインターセプト要求

のは、コードですべてのクラスを傍受するためにHTTPリクエストを見てみましょう。統合には、次の2種類がのIHttpModule IHttpHandlerFactoryを含めます

システムを使用しました。
System.Collections.Genericを使用しました。
System.Linqのを使用しました。
System.Webのを使用して、

名前空間SoonnetWebSite 
{ 
    /// <要約> 
    /// Handler2的摘要说明
    /// </要約> 
    パブリッククラスHandler2:のIHttpModule 
    { 
        公共ボイド廃棄()
        { 
        } 

        プライベートボイドApplication_AcquireRequestState(オブジェクトソース、のEventArgs電子)
        { 
            のHttpApplicationのHttpApplication = (のHttpApplication)源; 
            文字列のURL = httpApplication.Context.Request.Path.ToLower(); 
            ストリングimgPhysicalPath = httpApplication.Request.Url.ToString()。
            。! - (imgPhysicalPath.ToLower()IndexOfメソッド( "HTTPS")= 0 && imgPhysicalPath.IndexOf( "ビデオ/ VideoUpload.aspx")== -1 && imgPhysicalPath.IndexOf( "写真/ PhotoUpload.aspx")==場合1)
            { 
                imgPhysicalPath = imgPhysicalPath.Replace( "HTTP"、 "HTTPS")。
                httpApplication.Response.Redirect(imgPhysicalPath)。
                返します。
            } 
            // httpApplication.Response.Redirect(imgPhysicalPath)。
        } 


        公共ボイド初期(のHttpApplicationコンテキスト)
        { 
            context.AcquireRequestState + =(新しいイベントハンドラ(this.Application_AcquireRequestState))。
        }
        //パブリックIHTTPハンドラGetHandler(のHttpContextコンテキスト、文字列requestType、文字列のURL、文字列pathTranslated)
        // { 
        // IHTTPハンドラハンドラ= NULL; 
        //文字列アクション= url.Substring(url.LastIndexOf( "/"、StringComparison.Ordinal)+ 1)。
        //アクション= action.Substring(0、action.IndexOf(StringComparison.Ordinal) ""); 
        //するvar RURL = context.Request.RawUrl.Replace( "/"、 ""); 
        //文字列actionClass = $ "SoonnetWebSite {RURL}";

            

        //} 
    } 
}

  

私たちはIHTTPハンドラを見てみましょう 

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.IOを。
使用してSystem.Linqのを。
使用してのSystem.Webを。

名前空間SoonnetWebSite 
{ 
    ///  <要約> 
    /// Handler1的摘要说明
     ///  </要約> 
    パブリック クラスHandler1:IHTTPハンドラ
    { 
        民間 のconst  文字列 DEFAULTIMAGE_URL = " /SGL_Images/Userlogo_Big.jpg " 公共 ボイドのprocessRequest(のHttpContextコンテキスト)
        { 
            ストリング imgPhysicalPath =()context.Request.Url.ToString;
              rawUrl = context.Request.RawUrl.ToString(); 
            System.Drawing.Imageイメージ = NULL ;
             IF (File.Exists(context.Server.MapPath(rawUrl)))
            {                          / / 空の 
                画像= System.Drawing.Image.FromFile(context.Server.MapPath(rawUrl)); 
            } 
            
            {              // 画像が存在しない場合、デフォルト画像が置か            
                画像= System.Drawing.Image.FromFile(コンテキスト。 Server.MapPathの(DEFAULTIMAGE_URLは)); 
            } 
            // 提供される出力の種類を      
            = context.Response.ContentType " 画像/ JPEG " ;
             // 出力ストリームでの画像保存       
            Image.Save(context.Response.OutputStream、System.Drawing.Imaging.ImageFormat.Jpeg); 
            Image.Disposeを(); 
        } 

        公共 BOOL IsReusable 
        { 
            GET 
            { 
                戻り falseに; 
            } 
        } 
    } 
}

次のようにコードの両端に配置

  <system.webServer> 
    <セキュリティ> 
      <requestFiltering> 
        <requestLimits maxAllowedContentLength = "1126400000" /> 
      </ requestFiltering> 
    </セキュリティ> 
    <検証validateIntegratedModeConfiguration = "偽" />     <ハンドラ> 
      <名前= "IHTTPハンドラ"動詞を追加=」 GET、POST "パス= "LokARX.cc"タイプ= "SoonnetWebSite.Web_Data.Lok_ARequestX、SoonnetWebSite"/> 
      <名を追加= "IHttpHandler2"動詞= "GET"パス= "LokIF.cc"タイプ=" SoonnetWebSite.Web_Data。 Lok_Interface、SoonnetWebSite」/> 
      <名を追加= "Handler1"動詞= "*"パス= "*。JPG"タイプ= "SoonnetWebSite.Handler1、SoonnetWebSite" /> 
    </ハンドラ> 
    <モジュール>

      <名前= "Handler2"タイプを追加= "SoonnetWebSite.Handler2、SoonnetWebSite" /> 
    </モジュール> 
  </system.webServer>

  マシンのテストノードのIISの設定に問題が同じではありませんが見つかりました。レイアウト回線使用

<system.webServer> 
    <セキュリティ> 
      <requestFiltering> 
        <requestLimits maxAllowedContentLength = "1126400000" /> 
      </ requestFiltering> 
    </セキュリティ> 
    <検証validateIntegratedModeConfiguration = "偽" />     <のhttpHandlers> 
      <名前= "IHTTPハンドラ"動詞を追加=」 GET、POST "パス= "LokARX.cc"タイプ= "SoonnetWebSite.Web_Data.Lok_ARequestX、SoonnetWebSite"/> 
      <名を追加= "IHttpHandler2"動詞= "GET"パス= "LokIF.cc"タイプ=" SoonnetWebSite.Web_Data。 Lok_Interface、SoonnetWebSite」/> 
      <名を追加= "Handler1"動詞= "*"パス= "*。JPG"タイプ= "SoonnetWebSite.Handler1、SoonnetWebSite" /> 
    </ httpHandlersの> 
    <のHttpModules>

      <名前= "Handler2"タイプを追加= "SoonnetWebSite.Handler2、SoonnetWebSite" /> 
    </のHttpModules> 
  </system.webServer>

 フロントのhttp以上の設定

IISは関係の統合モデルと古典的なモデルであるため、

参考リンクします。https://blog.csdn.net/hongwei_23/article/details/44300923

 

HTTP、HTTPS、ターンの参照リンクします。https://blog.csdn.net/suxuelian/article/details/80103514

おすすめ

転載: www.cnblogs.com/Mrly/p/11497671.html