ASP.NET MVC on IIS 7.5 - Error 403.14 Forbidden
Asked Answered
Z

28

342

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.

enter image description here

Zahara answered 3/3, 2010 at 21:6 Comment(10)
Okay, I have a similar problem and it shows up only with ASP.NET MVC 3 websites. ASP.NET MVC 2 websites work fine. I placed a Default.aspx file in the root of the website and it got picked up okay, no problem. I have bin-deployed the ASP.NET MVC 3 website using VS2010 SP1 and still no-joy. I am at my wits end with this.Rutledge
Did you make sure that the app pool for the MVC 3 app is set to .NET 4.0?Zahara
Yeah. It's set to 4.0/Integrated. I have also ran aspnet_regiis -ir.Rutledge
I am having this same issue. I have set the application to use 4.0 integrated, ran the registration command to register .NET with IIS (7.5) and still get this error.Straus
I was finally able to find the problem in my set up, which was that I had renamed the file _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.Rutledge
Make sure that you run aspnet_regiis -i/aspnet_regiis -r as given below. For good measure, delete the existing website and app pool if you can and stop IIS before you run the commands. You should also make sure that you either install ASP.NET MVC 3 onto the server, or Bin Deploy. For doing that easily, you're gonna need VS2010 SP1. See my first answer to this question https://mcmap.net/q/94363/-asp-net-mvc3-in-iis-7-5 for how to do that.Rutledge
Has anyone found a solution to this on Windows 8 with IIS 8?Fitzsimmons
If you're on Windows Server 2012 or window 8 see this: [#12135213 [1]: #12135213Enlistment
Disable ASP.NET impersonation and it can fix the problem tooAnzus
I found I had to recreate my application in IIS to get it working too.Enrollment
Z
499

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)

Zahara answered 4/3, 2010 at 2:20 Comment(7)
Note the "64" in Framework64 for 64-bit Windows! that bit me in the *ss. I must've installed the 32 bit verion 4 or 5 times with no effect.Sea
How do I use this command on hosting? I can't run applications on the hosting!Nomo
If you're on a shared host, you need to contact your provider to enable .NET 4 for you.Zahara
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).Drooff
to add to @blesh, if you have 64-bit and run the 32-bit aspnet_regiis.exe, it might just re-show you the options and do nothingCap
If the aspnet_regiis.exe command is missing from the .net framework folder, download the full .net framework installer microsoft.com/download/en/…Drummer
This doesn't work in IIS8 btw, if you try you get "This option is not supported on this version of the operating system. Administrators should instead install/uninstall ASP.NET 4.5 with IIS8 using the "Turn Windows Features On/Off" dialog, the Server Manager management tool, or the dism.exe command line tool. For more details please see go.microsoft.com/fwlink/?LinkID=216771."Snarl
V
199

One more thing to make sure you have is the following set in your web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Varnado answered 23/6, 2011 at 14:20 Comment(3)
If you don't want to set runAllManagedModulesForAllRequests (which runs even for static files) you can install a Microsoft hotfix: microsoft.com/download/en/….Galactic
Try to avoid this by adding the routing module: britishdeveloper.co.uk/2010/06/…Marketable
If you are using VS2013 and trying to run on IIS 7.5 - you need to add thisOdessaodetta
Z
77

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

Zulemazullo answered 5/3, 2013 at 7:24 Comment(4)
This fixed the 403.14 on the root, and 404 on other controller methods for my MVC app. There is still something fishy here, however, because I have another app running on the same server with the same visible site settings, and it works without this setting. This is a web.config created by an SPA project template courtesy of VS 2012, working fine on my box but not when published.Inconvenience
Yes, so my development device contained <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?Inconvenience
Note that it is apparently not the %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.Inconvenience
That works on Windows Server 2008 R2 IIS 7 for ASP.NET MVC 5. Thank you!Oldtime
E
42

Another reason why someone might get this error is if the file Global.asax is not in the root folder anymore.

Enchantment answered 13/9, 2011 at 15:4 Comment(2)
Also fixed it for me: switched off pre-compilation in publish options (global.asax is only file affected).Softwood
In my case, with a Web Site rather than Web Application, the Global.asax file had to say CodeFile="Global.asax.cs" rather than CodeBehind="Global.asax.cs". The VS UI kind of fought with me to prevent creating it properly, probably because I was doing the site from scratch rather than using a template.Philine
N
20

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

Nonrecognition answered 21/10, 2011 at 15:24 Comment(1)
For Windows 8, I still got errors after enabling HTTP Redirection. Had to do this as a second step: Add ASP.NET 4.5 role under Internet Information Services -> World Wide Web Services -> Application Development Features serverfault.com/questions/514091/…Alodi
R
15

According to 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!

Renelle answered 27/1, 2012 at 20:45 Comment(0)
D
7

Also u can switch AppPool to Integrated mode. Thnx to Michael Bianchi (https://mcmap.net/q/93187/-asp-net-mvc-on-iis-7-5-error-403-14-forbidden), I only want to underline that.

Delegacy answered 11/1, 2012 at 15:35 Comment(0)
P
7

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.

Pacification answered 25/7, 2014 at 4:39 Comment(2)
The 'dism' one worked for me (without applying any of the other proposed changes). I just had to switch the '/all' switch to the end to make sure that all 'parent' features were installed as well.Dewan
This worked for me. Running MVC 5 with .NET 4.5 on Windows Server 2012. IIS by default won't install .NET 4.5.Hopscotch
L
6

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.

Liger answered 4/3, 2013 at 11:1 Comment(2)
what is Server Manager? where do i find it?Photostat
Server Manager is located in the Administrative ToolsNoisome
K
5

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.

Kyungkyushu answered 26/9, 2012 at 9:15 Comment(2)
I had the file there for some reason even though my app isn't precompiled. Deleted the file and it works now. Thank you!Unfamiliar
I would be really happy if I saw this answer before spending 2 hours and solving it on my own..Decastere
F
4

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.

Fryer answered 28/10, 2011 at 11:34 Comment(0)
C
4

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.

Cauliflower answered 31/10, 2011 at 16:24 Comment(0)
U
4

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.

Uprush answered 17/7, 2013 at 4:19 Comment(1)
Same here. Publishing was no problem until today - unchecking solved it. Strange anywayDiallage
V
4

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.

Vestment answered 23/9, 2013 at 2:56 Comment(0)
R
4

In my case ASP.NET 4.5 is not installed on the server so installing ASP.NET 4.5 fixed the issue.

Rosarosabel answered 21/10, 2013 at 15:28 Comment(0)
G
4

You can solve this error by running cmd as admin than enter image description here

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

Gravante answered 6/5, 2015 at 11:17 Comment(0)
T
3

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!

Tanya answered 13/2, 2013 at 9:4 Comment(0)
S
3

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

Fix IIS & Asp.net

Shangrila answered 29/11, 2017 at 19:56 Comment(0)
B
2

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.

Berwick answered 27/9, 2011 at 17:26 Comment(0)
K
2

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}"
...
Kimmi answered 24/7, 2013 at 15:23 Comment(1)
It works for me! In case I changed 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!Historied
K
2

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.

Kilroy answered 7/8, 2013 at 10:2 Comment(0)
W
2

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

enter image description here

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.

Wang answered 29/6, 2015 at 14:18 Comment(1)
FYI 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.Osswald
E
1

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

Endoergic answered 20/6, 2011 at 12:28 Comment(0)
S
1

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.

Snarl answered 29/4, 2014 at 2:20 Comment(0)
S
1

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.

enter image description here

Sudra answered 7/8, 2015 at 16:31 Comment(0)
S
0

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!

Sipple answered 15/4, 2015 at 7:35 Comment(0)
K
0

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.

Kalong answered 31/8, 2016 at 21:29 Comment(0)
G
0

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.

Gummous answered 30/11, 2016 at 15:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.