Asp.net-mvc – Configuring IIS 7 & ASP.NET App for URL Routing

asp.netasp.net-mvciisiis-7url-routing

This is not an MVC topic.
I have an ASP.NET Application which performs URL Routing in the Application_Start method.

The routing looks like:

RouteTable.Routes.Add(new Route(
  "Profile/{query}",
  new RouteValueDictionary() { {"query",string.Empty} },
  new GenericRouteHandler("~/ProfileHttpHandler.ashx")
));

A GenericRouteHandler looks implements GetHttpHandler with:

var page= (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler));
...
return page;

And ProfileHttpHandler.ashx is just a Visual Studio template. It sets Content-type to "text/plain" and writes "hello world."

This application works correctly while debugging in Visual Studio (on the ASP.NET development server). A GET http://localhost:59474/Profile/abc123 routes to the http handler as expected.

However, when this app is published to a remote machine running IIS 7 in Integrated Pipeline mode, the process fails. I get HTTP 500 errors when attempting to GET anything inside the apps folder, including Default.aspx.

Web.Config is configured as such:

<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>

Lastly; I'm unsure whether this is relevant information. In my web service provider's control panel, I have the directory which this application resides in configured as a virtual directory.
It has the properties:

  • mydomain.ca/routeapp: Folder in your Hosting Space (domain.ca\wwwroot\routeapp)
  • Allow Anonymous Access: On.
  • Enable Integrated Windows Authentication: On.
  • Enable Basic Authentication: On.
  • ASP: Disabled.
  • ASP.NET: 2.0 Integrated Pipeline.
  • PHP: Disabled.
  • Perl: Enabled.

Best Answer

You can try to add this to your web.config file

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

For more information on this check the iis forum thread.