I'm running Windows 7 Ultimate (64 bit) using Visual Studio 2010 RC. I recently decided to have VS run/debug my apps on IIS rather than the dev server that comes with it.
However, every time I try to run an MVC app, I get the following error:
HTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this directory. Detailed Error Information Module DirectoryListingModule Notification ExecuteRequestHandler Handler StaticFile Error Code 0x00000000 Requested URL http://localhost:80/mySite/ Physical Path C:\myProject\mySite\ Logon Method Anonymous Logon User Anonymous
I placed a default.aspx
file in the directory and I received the following error:
HTTP Error 500.21 - Internal Server Error Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list
Are there any other steps I forgot to take to get this working?
Notes: I installed IIS 7.5 after installing VS 2010 RC. I used the built-in "Create Virtual Directory" button under the "Web" tab in the MVC project's "Properties" in Visual Studio 2010. I made sure that the application is using the ASP.NET 4 App Pool.
Below are the installed features of IIS I have.
https://imgur.com/0tajF.png
_Layout.cshtml
to _PageLayout.cshtml
and had made the corresponding change in _ViewStart.cshtml
as well, but apparently that was not enough. Once I reverted the name to _Layout.cshtml
, it started working. What was confusing was that _PageLayout.cshtml
was picked up correctly on Win7 32 bit but was not picked up on Win7 64 bit or WinSvr2K8 R2.
ASP.NET 4 was not registered in IIS. Had to run the following command in the command line/run
32bit (x86) Windows
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -ir
64bit (x64) Windows
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
Note from David Murdoch's comment:
That the .net version has changed since this Answer was posted. Check which version of the framework is in the %windir%\Microsoft.NET\Framework64 directory and change the command accordingly before running (it is currently v4.0.30319)
One more thing to make sure you have is the following set in your web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
runAllManagedModulesForAllRequests
(which runs even for static files) you can install a Microsoft hotfix: microsoft.com/download/en/….
Make sure you have is the following set in your web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Better solution:
Even though above solution works absolutely fine, it can cause other problem as it runs all your registered HTTP modules on every request (even on every request of .jpg .gif .css .html .pdf etc) and it is obviously waste of resource. Instead
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0"/>
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>
Make sure preCondition attribute is empty means it will run on all requests. [Read more](http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html,"Read original post")
<system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
, in the Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
and looked to have been modified on the date of my VS 2012 installation. So, the next question is, what is in my other project that is allowing it to function?
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
recommended by the top solution that sets whatever defaults must exist on my development device. That command does not resolve the issue for me once I remove the UrlRoutingModule reference.
Another reason why someone might get this error is if the file Global.asax is not in the root folder anymore.
global.asax
is only file affected).
I was also receiving this error and discovered that "HTTP Redirection" was not turned on in Windows Server. This blog post points this out as well: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx
Sweet Jesus. I tried all of the above things (but found my settings identical). YET ANOTHER SOLUTION if you are having issues:
http://support.microsoft.com/kb/980368
Try installing this KB for your system. If you are seeing 404s it might be because you don't have this update -- and the isapi module just isn't getting found and there's not a lot you can do about that without this!
Also u can switch AppPool to Integrated mode. Thnx to Michael Bianchi (https://stackoverflow.com/a/7956546/1143515), I only want to underline that.
For me on an Azure Server 2012 R2 IIS 8.5 VM with an Asp.Net MVC 5 app (bin deployed MVC 5) I had to do the following from an elevated cmd prompt even though I had 4.5 already installed:
dism /online /enable-feature /featurename:IIS-ASPNET45
Source: http://support.microsoft.com/kb/2736284
I also brute force installed all IIS features with the following PowerShell:
import-module servermanager
add-windowsfeature web-server -includeallsubfeature
Source: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2
Now my app is working.
We had a MVC application moved to a new server. .NET 4 and MVC 3 was installed, but we still got “Error 403.14″. In this case, this meant that IIS did not understand that it was dealing with a MVC application, it was looking for the default page.
The solution was simple: HTTP Redirection was not installed on the server.
Server Manager – Roles – Web Server (IIS) – Roles Services – HTTP Redirection: Not installed. Installed it, problem solved.
Also if your app is precompiled you should have
PrecompiledApp.config
in the root folder of your app otherwise you could get HTTP Error 403.14
as well.
Another possible solution, if you move around your global.asax, make sure the markup points to the correct MvcApplication class. Hopefully this will save someone in future.
I had used the WebDeploy IIS Extension to import my websites from IIS6 to IIS7.5, so all of the IIS settings were exactly as they had been in the production environment. After trying all the solutions provided here, none of which worked for me, I simply had to change the App Pool setting for the website from Classic to Integrated.
I have met the same 404.14 problem suddenly. Finally the problem had been fixed by unchecking "precompile while publishing" in the publish profile settings.
I altered my default route at one point from:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
To:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index" }
Which gave me your error. Glad someone mentioned routing because I probably would've been on this forever.
In my case ASP.NET 4.5 is not installed on the server so installing ASP.NET 4.5 fixed the issue.
https://i.stack.imgur.com/UTeyC.jpg
Do the same as in picture for windows 32 bit
Just make changes in 64 bit as framework64 instead of framework only Than go to iis and refresh the site If u still got some error make changes in application pool
I had another problem that led to this issue.
I had ensured my app pool was running .net 4 in integrated mode
I had run aspnet_regiis.exe -i
I had checked folder permissions were set correctly for the account running my app pool
None of these things worked. It turned out that in my web.config under system.webserver > modules I had the following:
<remove name="WindowsAuthentication" />
Obviously this removed the windows authentication module which seemed to somehow knock everything off kilter.
I hope this helps someone, as this cost me most of an evening!
The UI is a bit different in the newer versions of Windows Server. Here is where you have to enable ASP.Net in order to get it working on IIS
https://i.stack.imgur.com/KI2IV.png
Adding another solution for this issue.
in my Global.asax.cs file I had disabled attempted php files from being consumed by the MVC pipeline using the following:
routes.IgnoreRoute( "{*php}" );
I had done these previously in a MVC2 project and it worked fine, but doing this in my MVC 3 app caused the issue reported above.
Yet another reason this can happen - your RouteConfig.cs
or WebApiConfig.cs
are invalid.
In my case, I had a route defined as such (note the parenthesis instead of curly brace):
...
routeTemplate: "api/(something}"
...
routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );
. When I fixed id = UrlParameter.Optional
on repositoryId = UrlParameter.Optional
it start to work!
Please note for Windows 8 users you need to add/remove windows components and remove the version of .net reboot then re-install in order to register it with IIS. I presume this happens if you get .net 4.5 from visual studio and install IIS afterwards.
As strange as it may seem, reinstalling IIS was what has worked for me, with the following command run from inside the .net version folder:
aspnet_regiis.exe /i
https://i.stack.imgur.com/wIqjT.png
When I first run this command, I begun getting the HTTP Error 403.14. But once I runned the command again it solved the problem.
Obs: Another thing I also did was to remove HTTP Redirect from the server features in Server Management screen before reiinstalling IIS. Maybe this also had an impact in solving the problem, but I am not sure. So, if reinstalling IIS still doesn't work, please try removing HTTP Redirect and try again. Hopefully it may work for you too.
aspnet_regiis.exe
does not install or reinstall IIS, it just registers a particular .NET framework version, so that it can be used by IIS for hosting applications.
To solve this problem without having to resort to 32 bit mode you will have to update the source code for this project
public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
// Enumerate assembly for UrlRoute attributes.
List<MapRouteParams> routeParams = new List<MapRouteParams>();
AppDomain.CurrentDomain.GetAssemblies()
.ToList()
.ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));
I have raised this issue as a discussion on the discussion board at the IT cloud codeplex project.
http://itcloud.codeplex.com/discussions/262000
This worked for me and it might be useful to another one.
Maybe all components required are not present or/and not all are registered correctly. In order to solve this, try to uncheck all options inside Control Panel -> Turn Windows features on or off -> Internet Information Services -> World Wide Web Services -> Application Development Features, uncheck all options and recheck all then reset the IIS and check if the problem is solved.
https://i.stack.imgur.com/WoeyO.png
If you're running IIS 8.5 on Windows 8, or Server 2012, you might find that running mvc 4/5 (.net 4.5) doesn't work in a virtual directory. If you create a local host entry in the host file to point back to your local machine and then point a new local IIS website to that folder (with the matching host header entry) you'll find it works then.
I created a new namespace (and therefore folder) identical to the route to a controller (e.g. MvcApp/Test/SomeClasses.cs
and MvcApp/Controllers/TestController.cs
). This resulted also in a 403.14!
For me, the solution was to add the NuGet package Microsoft.AspNet.WebPages (plus it's Razor and Infrastructure dependencies) to my web project.
Infrastructure had to be forcefully reinstalled as it was not added as a reference at first.
In my case .NET CRL Version in Application pool prppertires was set to No managed code (do not know why). Setting it to .NET CRL Version v4.0.30319 solved the problem.
Success story sharing
%windir%\Microsoft.NET\Framework64
directory and change the command accordingly before running (it is currently v4.0.30319).