可以将新文件扩展名映射到ASP.NET中的现有处理程序吗?

时间:2010-05-18 23:24:38

标签: asp.net web-services asmx httphandler httpmodule

我有一个场景,我的应用程序将发布PC和移动设备消耗的服务,我有一个HTTPModule,我只希望只对移动请求执行工作。所以我认为最好的方法是将移动请求指向不同的文件扩展名,并让HTTPModule决定仅在请求以此新扩展名为目标时进行处理。

我不需要为新扩展程序使用自定义HTTPHandler;我想像普通的.ASMX服务一样对服务进行编程,只是使用不同的扩展名。

首先,我可以这样做吗?如果是这样,我该怎么做才能处理对我的新扩展的请求,就像.ASMX请求一样?

其次,这是正确的方法吗?我是否打算以错误的方式分离和管理移动与PC请求?

谢谢, 戴夫

1 个答案:

答案 0 :(得分:2)

是的,可以注册自定义文件扩展名并使其与现有的.NET运行时一起使用。您可以执行以下步骤。

您需要在IIS中添加ScriptMap(假设是IIS 7)并将其指向ASP.NET运行时,以便IIS可以将请求转发到正确的处理器。

  1. 在IIS7中,转到您的网站或IIS根目录以在服务器级别注册
  2. 在IIS组下,转到Handler Mappings
  3. 在“操作”下,单击“添加脚本映射”
  4. 将请求路径设置为* .xxxx
  5. 设置ASP.NET运行时的路径(%windir%\ Microsoft.NET \ Framework64 \ v2.0.50727 \ aspnet_isapi.dll)或您正在运行的任何版本。
  6. 然后,您需要为文件扩展名注册自定义构建提供程序,以便.NET运行时可以预编译代码,前提是您希望它与* .asmx服务类似。

    以下是一些内置构建提供程序的列表:

    <system.web>
        <compilation>
            <buildProviders>
               <add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
               <add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
               <add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
               <add extension=".asix" type="System.Web.Compilation.ImageGeneratorBuildProvider" />
               <add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
               <add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
               <add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
               <add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
               <add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
               <add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
               <add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider"/>
               <add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
            </buildProviders>
        </compilation>
    </system.web>
    

    您很可能只是根据与您正在做的最匹配的现有构建提供程序之一复制现有构建提供程序,并在应用程序web.config中注册它。

    <system.web>
        <compilation>
            <buildProviders>
               <add extension=".xxxx" type="System.Web.Compilation.WebServiceBuildProvider" />
            </buildProviders>
        </compilation>
    </system.web>