在开发ASP.NET应用程序时,经常需要集成一些强大的前端库来提升用户体验。Ext.Net是一个基于Ext JS的.NET库,它提供了丰富的UI组件和功能,非常适合用于构建复杂的Web应用程序。然而,在集成Ext.Net的过程中,可能会遇到一些配置上的问题,特别是当它与ASP.NET的路由功能一起使用时。本文将详细介绍如何在ASP.NET应用程序中集成Ext.Net,并解决与ASP.NET路由功能的冲突问题。
首先,需要下载并安装Ext.Net库。可以从官方网站 下载最新版本的Ext.Net,并按照以下步骤进行配置:
<configuration>
<section name="extnet" type="Ext.Net.GlobalConfig" requirePermission="false" />
<configSections>
<system.web>
<httpHandlers>
<add path="*/ext.axd" verb="*" type="Ext.Net.ResourceHandler" validate="false" />
</httpHandlers>
<httpModules>
<add name="DirectRequestModule" type="Ext.Net.DirectRequestModule, Ext.Net" />
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="DirectRequestModule" preCondition="managedHandler" type="Ext.Net.DirectRequestModule, Ext.Net" />
</modules>
<handlers>
<add name="DirectRequestHandler" verb="*" path="*/ext.axd" preCondition="integratedMode" type="Ext.Net.ResourceHandler" />
</handlers>
</system.webServer>
</configSections>
</configuration>
接下来,需要将Ext.Net添加到Visual Studio的工具箱中。打开一个.aspx文件,然后在工具箱中添加一个新的标签页(例如命名为Ext.Net),并选择所有组件。
要在ASP.NET页面中使用Ext.Net,需要进行以下两个更改:
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<ext:ResourceManager ID="ResourceManager1" runat="server" />
要配置ASP.NET网站或Web应用程序进行路由,首先需要添加对System.Web.Routing程序集的引用。在.NET Framework 3.5的SP1安装中,此程序集将被安装到全局程序集缓存中,可以在标准的“添加引用”对话框中找到该程序集。还需要将路由模块配置到ASP.NET管道中。路由模块是一个标准的HTTP模块。对于IIS 6.0及更早版本,以及Visual Studio Web开发服务器,可以使用web.config文件中的
<httpModules>
<add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
URL重写实现通常在BeginRequest事件期间执行其工作,这是请求期间最早触发的事件。使用URL路由时,路由匹配和选择路由处理器发生在PostResolveRequestCache阶段,这是在处理的认证、授权和缓存查找阶段之后。稍后将重新审视此事件定时的影响。
要在IIS 7.0中运行具有路由的网站,需要在web.config中有两个条目。第一个条目是URL路由模块配置,可以在
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
runAllManagedModulesForAllRequests
属性需要设置为true
,如果想使用在本示例中所做的无扩展名URL。配置UrlRouting.axd的HTTP处理器可能看起来很奇怪。这是路由引擎所需的一个小工作方式,以便在IIS 7.0下工作。UrlRouting模块实际上将传入的URL重写为~/UrlRouting.axd,这将重写URL回到原始的传入URL。
在移除与路由相关的代码后,Ext.Net可以正常工作。但同时需要它们一起工作。然后尝试找到解决问题的方法,并在Google上找到了一些链接,编译并应用了它们,最终找到了同时使用它们的解决方案。
解决方案如下:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="DirectRequestModule" type="Ext.Net.DirectRequestModule, Ext.Net" />
</modules>
<handlers>
<add name="DirectRequestModule" type="Ext.Net.DirectRequestModule, Ext.Net" />
</handlers>
</system.webServer>
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
RouteTable.Routes.Ignore("admin/{*pathInfo}");
// 这是因为在admin模块中使用了ext.net