IHttpHandlerFactory.GetHandler(HttpContext, String, String, String) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回類別的執行個體,此類別可實作 IHttpHandler 介面。
public:
System::Web::IHttpHandler ^ GetHandler(System::Web::HttpContext ^ context, System::String ^ requestType, System::String ^ url, System::String ^ pathTranslated);
public System.Web.IHttpHandler GetHandler (System.Web.HttpContext context, string requestType, string url, string pathTranslated);
abstract member GetHandler : System.Web.HttpContext * string * string * string -> System.Web.IHttpHandler
Public Function GetHandler (context As HttpContext, requestType As String, url As String, pathTranslated As String) As IHttpHandler
參數
- context
- HttpContext
HttpContext 類別的執行個體,提供對內建伺服器物件 (例如,Request
、Response
、Session
和 Server
) 的參考,用以服務 HTTP 要求。
- requestType
- String
用戶端使用的 HTTP 資料傳輸方法 (GET
或 POST
)。
- pathTranslated
- String
要求資源的 PhysicalApplicationPath。
傳回
處理要求的新 IHttpHandler 物件。
範例
下列程式碼範例示範如何建立自訂處理常式物件以回應用戶端要求。 此範例有兩個部分:
處理常式處理站類別。
Web.config檔案摘錄。
範例的第一個部分示範如何建立自訂處理常式物件,以回應名為 abc.aspx 或 xyz.aspx 的頁面用戶端要求。 名為 hwf
的處理常式處理站類別會根據所要求的頁面,建立適當的處理常式物件。
// Name this C# file HandlerFactoryTest.cs and compile it with the
// command line: csc /t:Library /r:System.Web.dll HandlerFactoryTest.cs.
// Copy HandlerFactoryTest.dll to your \bin directory.
namespace test
{
using System;
using System.Web;
// Factory class that creates a handler object based on a request
// for either abc.aspx or xyz.aspx as specified in the Web.config file.
public class MyFactory : IHttpHandlerFactory
{
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
public virtual IHttpHandler GetHandler(HttpContext context,
String requestType,
String url,
String pathTranslated)
{
String fname = url.Substring(url.LastIndexOf('/')+1);
String cname = fname.Substring(0, fname.IndexOf('.'));
String className = "test." + cname;
Object h = null;
// Try to create the handler object.
try
{
// Create the handler by calling class abc or class xyz.
h = Activator.CreateInstance(Type.GetType(className));
}
catch(Exception e)
{
throw new HttpException("Factory couldn't create instance " +
"of type " + className, e);
}
return (IHttpHandler)h;
}
// This is a must override method.
public virtual void ReleaseHandler(IHttpHandler handler)
{
}
}
// Class definition for abc.aspx handler.
public class abc : IHttpHandler
{
public virtual void ProcessRequest(HttpContext context)
{
context.Response.Write("<html><body>");
context.Response.Write("<p>ABC Handler</p>\n");
context.Response.Write("</body></html>");
}
public virtual bool IsReusable
{
get { return true; }
}
}
// Class definition for xyz.aspx handler.
public class xyz : IHttpHandler
{
public virtual void ProcessRequest(HttpContext context)
{
context.Response.Write("<html><body>");
context.Response.Write("<p>XYZ Handler</p>\n");
context.Response.Write("</body></html>");
}
public virtual bool IsReusable
{
get { return true; }
}
}
}
/*
______________________________________________________________
To use the handler factory, use the following lines in a
Web.config file.
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
<add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
</httpHandlers>
</system.web>
</configuration>
*/
' Name this Visual Basic file HandlerFactoryTest.vb and compile it with
' the command line: vbc /t:Library /r:System.Web.dll HandlerFactoryTest.vb.
' Copy HandlerFactoryTest.dll to your \bin directory.
Imports System.Web
Namespace test
' Factory class that creates a handler object based on a request
' for either abc.aspx or xyz.aspx as specified in the Web.config file.
Public Class MyFactory
Implements IHttpHandlerFactory
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Public Overridable Function GetHandler(context As HttpContext, _
requestType As String, url As String, pathTranslated As String) _
As IHttpHandler _
Implements IHttpHandlerFactory.GetHandler
Dim fname As String = url.Substring(url.LastIndexOf("/"c) + 1)
Dim cname As String = fname.Substring(0, fname.IndexOf("."c))
Dim className As String = "test." & cname
Dim h As Object = Nothing
Try ' to create the handler object.
' Create by calling class abc or class xyz.
h = Activator.CreateInstance(Type.GetType(className))
Catch e As Exception
Throw New HttpException("Factory couldn't create instance " & _
"of type " & className, e)
End Try
Return CType(h, IHttpHandler)
End Function
' This is a must override method.
Public Overridable Sub ReleaseHandler(handler As IHttpHandler) _
Implements IHttpHandlerFactory.ReleaseHandler
End Sub
End Class
' Class definition for abc.aspx handler.
Public Class abc
Implements IHttpHandler
Public Overridable Sub ProcessRequest(context As HttpContext) _
Implements IHttpHandler.ProcessRequest
context.Response.Write("<html><body>")
context.Response.Write("<p>ABC Handler</p>" & _
Microsoft.VisualBasic.ControlChars.CrLf)
context.Response.Write("</body></html>")
End Sub
Public Overridable ReadOnly Property IsReusable() As Boolean _
Implements IHttpHandler.IsReusable
Get
Return True
End Get
End Property
End Class
' Class definition for xyz.aspx handler.
Public Class xyz
Implements IHttpHandler
Public Overridable Sub ProcessRequest(context As HttpContext) _
Implements IHttpHandler.ProcessRequest
context.Response.Write("<html><body>")
context.Response.Write("<p>XYZ Handler</p>" & _
Microsoft.VisualBasic.ControlChars.CrLf)
context.Response.Write("</body></html>")
End Sub
Public Overridable ReadOnly Property IsReusable() As Boolean _
Implements IHttpHandler.IsReusable
Get
Return True
End Get
End Property
End Class
End Namespace
'______________________________________________________________
'
'To use the handler factory, use the following lines in a
'Web.config file. (be sure to remove the comment markers)
'
' <add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
' <add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
範例的第二個部分會顯示Web.config檔案摘錄。 若要使用上述處理常式處理站,請將下列幾行新增至 Web.config 檔案。
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="abc.aspx" type="test.MyFactory,HandlerFactoryTest" />
<add verb="*" path="xyz.aspx" type="test.MyFactory,HandlerFactoryTest" />
</httpHandlers>
</system.web>
</configuration>