Can't run ASP.NET MVC 2 web app on IIS 7.5
I'm trying to run an ASP.NET MVC 2 web application under IIS on Windows 7, but I get a 403.14 error. Here are the steps to reproduce:
- Open Visual Studio 2010
- Create a new ASP.NET MVC 2 project called MvcApplication1
- Shift+F5 to run the app. You should see
http://localhost:{random_port}/
and the page will render correctly. - Click on MvcApplication1, and select "Properties". Go to the "Web" section.
- Select "Use Local IIS Web server" and create a virtual directory.
- Save.
- Shift+F5 to run the app. You should see
http://localhost/MvcApplication1/
and an IIS errorHTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this directory.
.
It's clear that for whatever reason, ASP.NET routing is not working correctly.
Things I've already thought of and tried:
- Verified that all IIS features are enabled in "Turn Windows features on or off".
- Verified that the default website is configured to use .NET 4.0
- Reassigned ASP.NET v4 scripmaps via
aspnet_regiis -i
in thev4.0.30319
directory.
Here's the most amazing part - this is on a just-built machine. New copy of Windows 7 x64 Ultimate, clean install of Visual Studio 2010 Premium, no other websites and no other work performed.
Anything else I can try?
Solution 1:
Ok, this is resolved for me, by doing the following:
Running aspnet_regiis -i
in the 32-bit directory c:\Windows\Microsoft.NET\Framework\v4.0.30319
.
At this point, I don't understand why 64-bit mode isn't working, but I'm now unblocked. Hopefully this helps anyone else who is having this issue.
Solution 2:
I had exactly the same issue, so thanks for your help.
However... did you try running the aspnet_regiis -i
command in the Visual Studio 64 bit command prompt (with admin privileges)? When I did that it fixed it for the 64-bit mode.
To clarify, I right clicked on Visual Studio x64 Win64 Command Prompt (2010)
and chose Run as Administrator. Then I went here:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
And did this: aspnet_regiis -i
And now it works perfectly.
Solution 3:
Also ensure that you configuration file has the following line otherwise the routing will not work.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Solution 4:
Don't use runAllManagedModulesForAllRequests. You want to let IIS handle resources such as images.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Instead add the MVC routing module
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
Solution 5:
Another thing to note, make sure your application pool is set to integrated, not classic