asp.net 注册 HTTP 处理程序 (httphandler配置)
创建自定义 HTTP 处理程序类后,必须在 Web.config 文件中注册该类。这将允许 ASP.NET 调用 HTTP 处理程序,以便处理对具有指定文件扩展名的资源的请求.
在Web.config 文件中,
对于在传统模式下运行的 IIS 7.0, 可以在 httpHandlers 节中注册处理程序,并将该处理程序映射到 Aspnet_isapi.dll 文件。
对于在集成模式下运行的 IIS 7.0,可以使用 system.WebServer 节中的 handlers 元素注册处理程序
<configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <!--<authentication mode="Forms"> <forms cookieless="UseCookies" defaultUrl="Default.aspx" enableCrossAppRedirects="false" loginUrl="Login.aspx" name=".auth" path="/" protection="All" slidingExpiration="true" timeout="2"></forms> </authentication> <authorization> <deny users="?" /> </authorization>--> <machineKey decryption="Auto" decryptionKey="BA161C482EB0DF2C5FC6BBF8E17E9E499F7070E98C1CD55E,IsolateApps" validationKey="AFD0C7CB6B9D4168623DE88E4C6399AAE8B879226D34D0FCAB25962B26C0DE75D421AC4D16A7700C312B7EE94075D816371149FCBECD47935712E1495D12171E,IsolateApps" /> <httpHandlers> <!--iis7经典模式开启所有请求过滤,同时需设置 system.webServer/handlers--> <add path="*.jpg" verb="*" type="httpWeb.DownloadHandler" validate="true" /> <!--<add path="*.jpg" verb="*" type="httpWeb.DownloadHandler" validate="true" />--> <!--<add path="*.rar" verb="*" type="httpWeb.DownloadHandler" validate="false" />--> </httpHandlers> <httpModules> <!--<add name="DownloadModule" type="httpWeb.DownloadModule" />--> <!--经典模式modules--> </httpModules> </system.web> <!--<location path="sub1"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location>--> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <!--<add name="DownloadModule" type="httpWeb.DownloadModule" />--> <!--集成模式 modules--> </modules> <handlers accessPolicy="Read, Execute, Script"> <!--iis7经典模式开启所有请求过滤,同时需设置 system.web/httpHandlers,scriptProcessor为你程序使用的aspnet_isapi版本,如程序运行在64位下就Framework64的aspnet_isapi.dll-->
<add name="DownloadHandler" path="*.jpg" verb="*" type="httpWeb.DownloadHandler" modules="IsapiModule"
scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="bitness32" /> <!--iis7集成模式只需设置此处--> <!--<add name="DownloadHandler" path="*.jpg" verb="*" type="httpWeb.DownloadHandler" />--> </handlers> <validation validateIntegratedModeConfiguration="false" /> <!--在将应用程序从使用经典模式更改为集成模式时,如果要保留经典模式(和 IIS 6.0)的自定义模块和处理程序注册, 必须设置 validation 元素以避免出现警告消息。--> </system.webServer> </configuration>
//downloadHandler.cs
using System; using System.Web; namespace httpWeb { public class DownloadHandler : IHttpHandler { /// <summary> /// 您将需要在您网站的 web.config 文件中配置此处理程序, /// 并向 IIS 注册此处理程序,然后才能进行使用。有关详细信息, /// 请参见下面的链接: http://go.microsoft.com/?linkid=8101007 /// </summary> #region IHttpHandler Members public bool IsReusable { // 如果无法为其他请求重用托管处理程序,则返回 false。 // 如果按请求保留某些状态信息,则通常这将为 false。 get { return true; } } public void ProcessRequest(HttpContext context) { //在此写入您的处理程序实现。 HttpRequest request = context.Request; HttpResponse response = context.Response; } #endregion } }