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.