Ext.Net集成与ASP.NET路由配置指南

在开发ASP.NET应用程序时,经常需要集成一些强大的前端库来提升用户体验。Ext.Net是一个基于Ext JS的.NET库,它提供了丰富的UI组件和功能,非常适合用于构建复杂的Web应用程序。然而,在集成Ext.Net的过程中,可能会遇到一些配置上的问题,特别是当它与ASP.NET的路由功能一起使用时。本文将详细介绍如何在ASP.NET应用程序中集成Ext.Net,并解决与ASP.NET路由功能的冲突问题。

环境配置

首先,需要下载并安装Ext.Net库。可以从官方网站 下载最新版本的Ext.Net,并按照以下步骤进行配置:

  1. 下载并解压Ext.Net库到一个新的目录。
  2. 将以下五个文件复制到项目的 /bin 目录中:
    • Ext.Net.dll
    • Ext.Net.Utilities.dll
    • Ext.Net.xml
    • Newtonsoft.Json.dll
    • Newtonsoft.Json.xml
  3. 解决方案资源管理器中,确保“显示所有文件”按钮被选中,并展开 /bin 目录以显示所有文件。
  4. 选择刚刚添加到 /bin 目录中的所有新文件,并将其包含到项目中。
  5. 在项目属性中,添加对这些DLL的引用,并在导入的命名空间中勾选以下选项:
    • Ext
    • Ext.Net
    • Ext.Net.Utilities
    • Newtonsoft
    • Newtonsoft.Json
  6. 在web.config文件中添加以下配置: <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),并选择所有组件。

集成Ext.Net到ASP.NET页面

要在ASP.NET页面中使用Ext.Net,需要进行以下两个更改:

  1. 在页面顶部(在页面指令下)添加以下代码,以便访问Ext.Net DLL: <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
  2. 在BODY标签中添加以下代码: <ext:ResourceManager ID="ResourceManager1" runat="server" />

配置ASP.NET路由

要配置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路由模块配置,可以在节中找到。还需要一个条目来处理UrlRouting.axd的请求,在节中。这两个条目如下:

<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上找到了一些链接,编译并应用了它们,最终找到了同时使用它们的解决方案。

解决方案如下:

  1. 中移除
  2. 按如下方式配置 <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>
  3. 配置global.asax C#: RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}"); RouteTable.Routes.Ignore("admin/{*pathInfo}"); // 这是因为在admin模块中使用了ext.net
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485