配置IIS 7&用于URL路由的ASP.NET应用程序

时间:2010-02-09 03:44:57

标签: asp.net asp.net-mvc iis iis-7 url-routing

这不是MVC主题。 我有一个ASP.NET应用程序,它使用Application_Start方法执行URL路由。

路由如下:

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文件夹中的任何内容时,我收到HTTP 500错误,包括Default.aspx。

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 Integrated Pipeline。
  • PHP:已禁用。
  • Perl:已启用。

2 个答案:

答案 0 :(得分:2)

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

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

有关此问题的详细信息,请查看iis forum thread

答案 1 :(得分:1)

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

检查this link