为URL路由配置IIS 7和ASP.NET应用程序
问题描述:
这不是一个MVC主题。 我有一个ASP.NET应用程序在Application_Start
方法中执行URL路由。为URL路由配置IIS 7和ASP.NET应用程序
路由的样子:
RouteTable.Routes.Add(new Route(
"Profile/{query}",
new RouteValueDictionary() { {"query",string.Empty} },
new GenericRouteHandler("~/ProfileHttpHandler.ashx")
));
一个GenericRouteHandler
看起来工具GetHttpHandler
有:
var page= (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler));
...
return page;
而且ProfileHttpHandler.ashx仅仅是一个Visual Studio模板。它将Content-type设置为“text/plain”并写入“hello world”。
此应用程序在Visual Studio中调试时(在ASP.NET开发服务器上)正常工作。如预期的那样,一个GET http://localhost:59474/Profile/abc123
路由到http处理程序。
但是,当此应用发布到集成管道模式下运行IIS 7的远程计算机时,该过程将失败。尝试获取apps文件夹内的任何内容(包括Default.aspx)时,会出现HTTP 500错误。
Web.Config中被配置为这样:
<system.web>
<httpModules>
<add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
</system.webServer>
最后;我不确定这是否是相关信息。在我的Web服务提供商的控制面板中,我将该应用程序所在的目录配置为虚拟目录。 它具有属性:
- mydomain.ca/routeapp:文件夹中主机空间(domain.ca \ wwwroot的\ routeapp)
- 允许匿名访问:开。
- 启用集成Windows身份验证:开启。
- 启用基本验证:开启。
- ASP:已禁用。
- ASP.NET:2.0集成管道。
- PHP:已禁用。
- Perl:已启用。
答
你可以尝试添加到您的web.config文件
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
欲了解更多有关这个检查iis forum thread。
答
要配置ASP.NET网站或Web应用程序进行路由,首先需要添加对System.Web.Routing程序集的引用。.NET Framework 3.5的SP1安装将将此程序集安装到全局程序集缓存,并且您可以在标准的“添加引用”对话框中找到该程序集。
您能从服务器上的事件日志中找出500错误吗? – 2010-02-09 03:49:05
我正在与我的提供商一起尝试获取一些日志。文件系统上的最新日志文件被锁定,我似乎无法访问它。 我已验证500错误是直接响应OP中描述的应用程序。将新的Web应用程序发布到虚拟目录让我获得HTTP 200。 – Kivin 2010-02-09 04:02:15
再次嗨。不幸的是,日志文件并没有包含足够的信息。 – Kivin 2010-02-09 05:00:40