2010-02-09 63 views
3

这不是一个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:已启用。
+0

您能从服务器上的事件日志中找出500错误吗? – 2010-02-09 03:49:05

+0

我正在与我的提供商一起尝试获取一些日志。文件系统上的最新日志文件被锁定,我似乎无法访问它。 我已验证500错误是直接响应OP中描述的应用程序。将新的Web应用程序发布到虚拟目录让我获得HTTP 200。 – Kivin 2010-02-09 04:02:15

+0

再次嗨。不幸的是,日志文件并没有包含足够的信息。 – Kivin 2010-02-09 05:00:40

回答

2

你可以尝试添加到您的web.config文件

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
</system.webServer> 

欲了解更多有关这个检查iis forum thread

+0

我没有在我的OP中包括这个,因为我不知道它是相关的。但是,它已经包含在我的web.config文件中。 – Kivin 2010-02-10 06:58:49

+1

看来我不注定要使用WebForms进行路由。我已经将我的项目移植到MVC,并且遇到了更少的麻烦。在关闭这个线程的名字中,我将这个分配为接受的答案。 – Kivin 2010-02-13 08:41:18

1

要配置ASP.NET网站或Web应用程序进行路由,首先需要添加对System.Web.Routing程序集的引用。.NET Framework 3.5的SP1安装将将此程序集安装到全局程序集缓存,并且您可以在标准的“添加引用”对话框中找到该程序集。

检查this link

相关问题