共用方式為


<處理常式處理常式>

概觀

元素 <handlers> 會定義針對特定副檔名或 URL 註冊的處理常式。

處理常式是 Internet Information Services (IIS) 元件,這些元件設定為處理特定內容的要求,通常是產生要求資源的回應。 例如,ASP.NET 網頁是一種處理常式類型。 您可以使用處理程式來處理任何需要將資訊傳回給非靜態檔案之使用者的資源要求。 IIS 提供數種不同的處理常式類型來支援靜態檔案、Common Gateway Interface (CGI) 應用程式、FastCGI 應用程式和 Internet Server API (ISAPI) 擴充功能。 ASP.NET 也支援透過 HTTP 處理常式介面的其他處理常式類型。

開發人員可以建立自訂處理常式來執行特殊處理,您可以在應用程式中使用副檔名來識別。 例如,如果開發人員建立了建立 RSS 格式 XML 的處理常式,您可以將應用程式中的 .rss 副檔名系結至自訂處理常式。 開發人員也可以建立對應至特定檔案的處理常式,並將這些處理常式實作為原生模組或 ASP.NET IHttpHandler 介面的實作。

相容性

版本 備註
IIS 10.0 未在 IIS 10.0 中修改專案 <handlers>
IIS 8.5 未在 IIS 8.5 中修改專案 <handlers>
IIS 8.0 未在 IIS 8.0 中修改專案 <handlers>
IIS 7.5 未在 IIS 7.5 中修改專案 <handlers>
IIS 7.0 元素 <handlers> 是在 IIS 7.0 中引進。
IIS 6.0 N/A

安裝程式

元素 <handlers> 包含在 IIS 7 的預設安裝中。

作法

如何在整合模式中執行的 IIS 7 應用程式中,為 ASP.NET 處理常式建立處理常式對應

  1. 開啟 [Internet Information Services (IIS) 管理員

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [系統管理工具],然後按兩下 [ Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [系統管理工具],然後按兩下 [ Internet Information Services] (IIS) Manager
  2. 在 [ 連線] 窗格中,按一下您要新增原生模組的伺服器連線。

  3. 在 [ 首頁] 窗格中,按兩下 [處理常式對應]。
    [首頁] 窗格的螢幕擷取畫面,其中已選取 [處理常式對應] 功能。

  4. 在 [ 動作 ] 窗格上,按一下 [ 新增受管理處理程式...

  5. 在 [ 新增 Managed 處理常式 ] 對話方塊中,指定下列專案:

    • 要求路徑。 要對應的檔案名或副檔名。

    • 類型。 型別 (類別) Managed 處理常式的名稱。 如果處理常式是在應用程式的app_code或 bin 資料夾中定義,則其類型名稱會出現在下拉式清單中。

    • 名稱。 描述性名稱。

      顯示 [新增受管理處理程式] 對話方塊的螢幕擷取畫面,其中包含 [要求路徑]、[類型] 和 [名稱] 欄位。

  6. 按一下 [確定 ] 以關閉 [ 新增 Managed 處理常式 ] 對話方塊。

如何建立 FastCGI 處理常式對應

  1. 開啟 [Internet Information Services (IIS) 管理員

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [系統管理工具],然後按兩下 [ Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [系統管理工具],然後按兩下 [ Internet Information Services] (IIS) Manager
  2. 在 [ 連線] 窗格中,按一下您要設定 FastCGI 處理常式對應的伺服器名稱。

  3. 在 [ 首頁] 窗格中,按兩下 [處理常式對應]。
    螢幕擷取畫面顯示 [伺服器首頁] 窗格,其中已選取 [處理常式對應] 功能。

  4. 在 [ 動作 ] 窗格中,按一下 [ 新增模組對應...

    注意

    若要讓後續步驟能夠運作,您必須已安裝二進位檔,以執行您指定的檔案路徑或副檔名。 此範例使用可從 Microsoft 網站取得的 PHP 實作。

  5. 在 [要求路徑] 方塊中輸入副檔名,例如.php,按一下[模組] 下拉式清單中的[FastCGIModule],在此範例中輸入腳本引擎 (的路徑,PHP-CGI.exe) [可執行檔] 方塊中,然後按一下 [確定]。
    [新增模組對應] 對話方塊的螢幕擷取畫面,其中已從 [模組] 下拉式清單中選取 [快速 C G I 模組]。

  6. 在 [ 新增模組對應 ] 對話方塊中,按一下 [ ]。
    顯示 [新增模組對應] 對話方塊的螢幕擷取畫面,詢問您是否要為可執行檔建立快速 C G I 應用程式。

組態

元素 <handlers> 包含專案的 <add> 集合,每個專案都會定義應用程式的處理常式對應。 元素 <add> 包含處理常式的名稱、處理常式對應的副檔名或 URL 路徑遮罩,以及指定處理常式實作的模組名稱或 ASP.NET HTTP 處理常式類型,以及其他設定。

<handlers>您可以在 Web.config 檔案中設定應用層級的專案。

屬性

屬性 描述
accessPolicy 選擇性旗標屬性。

指定整個處理常式集合的允許存取類型。

accessPolicy屬性可以是下列其中一個可能的值。 預設值為 Read
描述
Execute 在需要目錄和檔案中執行許可權的處理常式集合中啟用處理常式。
None 停用需要存取目錄或檔案之處理常式集合中的所有處理常式。
NoRemoteExecute 防止處理常式集合中的處理常式在處理常式收到遠端要求時執行可執行檔。
NoRemoteRead 防止處理常式集合中的處理常式在處理常式收到遠端要求時讀取檔案。
NoRemoteScript 防止處理常式集合中的處理常式在處理常式收到遠端要求時執行腳本。
NoRemoteWrite 防止處理常式集合中的處理常式在處理常式收到遠端要求時建立或變更檔案。
Read 啟用需要目錄和檔案讀取權限之處理常式集合中的處理常式。
Script 啟用處理常式集合中的處理常式,這些處理常式需要目錄或檔案的腳本許可權。
Source 啟用處理常式集合中的處理常式,這些處理常式需要原始程式碼 ( (讀取權限,以及原始程式碼的讀取) 或原始程式碼 (寫入權限) 。
Write 啟用需要目錄和檔案寫入權限之處理常式集合中的處理常式。

子元素

元素 描述
add 選擇性項目。

將處理常式加入至處理常式的集合。
clear 選擇性項目。

從處理常式集合中移除處理常式的所有參考。
remove 選擇性項目。

從處理常式集合中移除處理常式的參考。

組態範例

下列範例包含兩 <add> 個定義處理常式對應的元素。 第一 <add> 個專案會為 IIS 7 整合模式中執行的 Web 應用程式定義 SampleHandler 處理常式。 如果您將處理常式元件新增至 Web 應用程式的 app_code 目錄,則不需要在 type 屬性的值中包含元件名稱。 第二 <add> 個專案會定義使用 FastCGI 模組之 PHP 要求的對應。

<handlers>
   <add name="SampleHandler" verb="*" 
      path="SampleHandler.new" 
      type="SampleHandler, SampleHandlerAssembly" 
      resourceType="Unspecified" />
   <add name="PHP-FastCGI" verb="*" 
      path="*.php" 
      modules="FastCgiModule"
      scriptProcessor="c:\php\php-cgi.exe" 
      resourceType="Either" />
</handlers>

範例程式碼

下列範例會新增 PHP 模組的 FastCGI 對應,然後在 Contoso 網站上新增處理常式來處理 PHP 要求。

AppCmd.exe

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='c:\php\php-cgi.exe']" /commit:apphost

appcmd.exe set config "Contoso" -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='c:\php\php-cgi.exe',resourceType='Either']"

注意

第二個範例示範如何將名為 SampleHandler.new 的新 ASP.NET 處理常式對應新增至 Web 應用程式的特定 URL。

appcmd.exe set config /section:system.webServer/handlers /+[name=SampleHandler',path='SampleHandler.new',verb='*',type='SampleHandler']

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration appHostConfig = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection fastCgiSection = appHostConfig.GetSection("system.webServer/fastCgi");
         ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
         ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
         applicationElement["fullPath"] = @"c:\php\php-cgi.exe";
         fastCgiCollection.Add(applicationElement);

         Configuration webConfig = serverManager.GetWebConfiguration("Contoso");
         ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");
         ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
         ConfigurationElement addElement = handlersCollection.CreateElement("add");
         addElement["name"] = @"PHP-FastCGI";
         addElement["path"] = @"*.php";
         addElement["verb"] = @"GET,HEAD,POST";
         addElement["modules"] = @"FastCgiModule";
         addElement["scriptProcessor"] = @"c:\php\php-cgi.exe";
         addElement["resourceType"] = @"Either";
         handlersCollection.AddAt(0, addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim appHostConfig As Configuration = serverManager.GetApplicationHostConfiguration
      Dim fastCgiSection As ConfigurationSection = appHostConfig.GetSection("system.webServer/fastCgi")
      Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
      Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
      applicationElement("fullPath") = "c:\php\php-cgi.exe"
      fastCgiCollection.Add(applicationElement)

      Dim webConfig As Configuration = serverManager.GetWebConfiguration("Contoso")
      Dim handlersSection As ConfigurationSection = webConfig.GetSection("system.webServer/handlers")
      Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
      Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
      addElement("name") = "PHP-FastCGI"
      addElement("path") = "*.php"
      addElement("verb") = "GET,HEAD,POST"
      addElement("modules") = "FastCgiModule"
      addElement("scriptProcessor") = "c:\php\php-cgi.exe"
      addElement("resourceType") = "Either"
      handlersCollection.AddAt(0, addElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "c:\\php\\php-cgi.exe";
fastCgiCollection.AddElement(applicationElement);
adminManager.CommitChanges();

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso";
var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "c:\\php\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
handlersCollection.AddElement(addElement, 0);
adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "c:\php\php-cgi.exe"
fastCgiCollection.AddElement applicationElement
adminManager.CommitChanges()

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso"
Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "c:\php\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
handlersCollection.AddElement addElement, 0
adminManager.CommitChanges()