MVC do ASP.NET no IIS 7.5

338

Estou executando o Windows 7 Ultimate (64 bits) usando o Visual Studio 2010 RC. Recentemente, decidi fazer com que o VS execute / depure meus aplicativos no IIS, em vez do servidor de desenvolvimento que o acompanha.

No entanto, sempre que tento executar um aplicativo MVC, recebo o seguinte erro:

Erro HTTP 403.14 - Proibido O servidor Web está configurado para não listar o conteúdo deste diretório. Detalhado

Informações de erro

Módulo DirectoryListingModule

Notification ExecuteRequestHandler

Erro StaticFile do manipulador

Código 0x00000000 solicitado

URL http: // localhost: 80 / mySite /

Caminho físico C: \ myProject \ mySite \

Método de logon Logon anônimo

Usuário anônimo

Coloquei um default.aspxarquivo no diretório e recebi o seguinte erro:

Erro HTTP 500.21 - O manipulador de erros do servidor interno "PageHandlerFactory-Integrated" possui um módulo incorreto "ManagedPipelineHandler" em sua lista de módulos

Existem outras etapas que esqueci de fazer para que isso funcione?

Notas: Instalei o IIS 7.5 depois de instalar o VS 2010 RC. Usei o botão interno "Criar diretório virtual", na guia "Web", nas "Propriedades" do projeto MVC no Visual Studio 2010. Verifiquei se o aplicativo está usando o pool de aplicativos ASP.NET 4.

Abaixo estão os recursos instalados do IIS que tenho.

texto alternativo

Omar
fonte
Ok, eu tenho um problema semelhante e ele aparece apenas nos sites ASP.NET MVC 3. Os sites ASP.NET MVC 2 funcionam bem. Coloquei um arquivo Default.aspx na raiz do site e ele foi retirado, ok, não há problema. Implantei bin o site do ASP.NET MVC 3 usando o VS2010 SP1 e ainda assim não tenho alegria. Estou no meu juízo final com isso.
Umar Farooq Khawaja
5
Eu estou tendo este mesmo problema. Eu configurei o aplicativo para usar o 4.0 integrado, executei o comando de registro para registrar o .NET no IIS (7.5) e ainda assim receber esse erro.
Collin Branca
2
Eu finalmente foi capaz de encontrar o problema no meu set up, o que foi que eu tinha renomeado o arquivo _Layout.cshtmlde _PageLayout.cshtmle tinha feito a mudança correspondente no _ViewStart.cshtmlbem, mas aparentemente isso não foi suficiente. Depois de reverter o nome _Layout.cshtml, ele começou a funcionar. O que foi confuso foi que _PageLayout.cshtmlfoi captado corretamente no Win7 32 bits, mas não no Win7 64 bits ou no WinSvr2K8 R2.
Umar Farooq Khawaja
3
Alguém encontrou uma solução para isso no Windows 8 com o IIS 8?
Eric Z Beard
3
Se você estiver no Windows Server 2012 ou na janela 8, veja o seguinte: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
Lomak

Respostas:

499

O ASP.NET 4 não foi registrado no IIS. Teve que executar o seguinte comando na linha de comando / executar

Windows de 32 bits (x86)

% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

Windows de 64 bits (x64)

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

Nota do comentário de David Murdoch:

Que a versão .net mudou desde que esta resposta foi publicada. Verifique qual versão da estrutura está no diretório% windir% \ Microsoft.NET \ Framework64 e altere o comando adequadamente antes de executar (atualmente é a v4.0.30319)

Omar
fonte
9
Observe o "64" no Framework64 para Windows de 64 bits! isso me mordeu no * ss. Devo ter instalado a versão de 32 bits 4 ou 5 vezes sem efeito.
quer
14
Que a versão .net mudou desde que esta resposta foi publicada. Verifique qual versão da estrutura está no %windir%\Microsoft.NET\Framework64diretório e altere o comando adequadamente antes de executar (atualmente é a v4.0.30319).
David Murdoch
11
para adicionar à @blesh, se você tem 64 bits e executar o aspnet_regiis.exe de 32 bits, ele só poderia re-mostrar-lhe as opções e não fazer nada
xster
3
Se o comando aspnet_regiis.exe estiver ausente na pasta .net framework, baixe o instalador completo do .net microsoft.com/download/en/…
Warrickh
11
Isso não funciona no IIS8, se você tentar obter "Esta opção não é suportada nesta versão do sistema operacional. Os administradores devem instalar / desinstalar o ASP.NET 4.5 com IIS8 usando o botão" Ativar / desativar os recursos do Windows " caixa de diálogo, a ferramenta de gerenciamento do Gerenciador do Servidor ou a ferramenta de linha de comando dism.exe. Para obter mais detalhes, consulte go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro
199

Mais uma coisa para garantir que você possui é o seguinte conjunto no seu web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Mark Boltuc
fonte
23
Isso fez por mim. Obrigado
boca
5
Também resolveu para mim. Estranho, ele funciona localmente no VS2010 IIS Express sem essa configuração.
Phil
8
Se você não deseja definir runAllManagedModulesForAllRequests(que é executado até para arquivos estáticos), você pode instalar um hotfix da Microsoft: microsoft.com/download/en/… .
Justin Helgerson
10
Tente evitar isso adicionando o módulo de roteamento: britishdeveloper.co.uk/2010/06/…
Chris Herring
Se você estiver usando VS2013 e tentando executar no IIS 7.5 - você precisa adicionar este
KenL
77

Verifique se você possui o seguinte conjunto no seu web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>

Melhor solução:

Mesmo que a solução acima funcione perfeitamente , ela pode causar outro problema, pois executa todos os seus módulos HTTP registrados em todas as solicitações (mesmo em todas as solicitações de .jpg .gif .css .html .pdf etc.) e obviamente é desperdício de recursos. Em vez de

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

Verifique se o atributo preCondition está vazio significa que ele será executado em todas as solicitações. [Leia mais] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Leia a postagem original")

Premchandra Singh
fonte
6
Isso corrigiu o 403.14 na raiz e o 404 em outros métodos de controlador para o meu aplicativo MVC. Ainda há algo suspeito aqui, no entanto, porque eu tenho outro aplicativo em execução no mesmo servidor com as mesmas configurações visíveis do site e funciona sem essa configuração. Este é um web.config criado por um modelo de projeto do SPA, cortesia do VS 2012, funcionando bem na minha caixa, mas não quando publicado.
Shannon #
4
Sim, meu dispositivo de desenvolvimento continha <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.confige parecia ter sido modificado na data da minha instalação do VS 2012. Então, a próxima pergunta é: o que há no meu outro projeto que está permitindo que ele funcione?
precisa
Observe que aparentemente não é o %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irrecomendado pela solução superior que define os padrões que devem existir no meu dispositivo de desenvolvimento. Esse comando não resolve o problema para mim depois que eu removo a referência UrlRoutingModule.
Shannon
Isso funciona no Windows Server 2008 R2 IIS 7 para ASP.NET MVC 5. Obrigado!
Ervi B
42

Outro motivo pelo qual alguém pode receber esse erro é se o arquivo Global.asax não estiver mais na pasta raiz.

ZippyV
fonte
4
Sim - o instalador que escrevi não trouxe esse arquivo. Obrigado!
Zadam 23/09/11
4
Este também foi o meu problema. Eu nunca imaginaria, com base no sintoma 403, que meu aplicativo estava ausente do Global.asax
Saul Dolgin
3
Também foi corrigido para mim: desativou a pré-compilação nas opções de publicação (global.asax somente o arquivo é afetado).
Richard
11
Isso me enganou. O problema é que, para mim, e para muitos outros, global.asax é gerado toda vez que eu publicar. Alguém descobriu uma maneira de gerá-lo sempre?
Greg Z.
Obrigado, corrigiu meus problemas. O aplicativo é executado no ASP.NET MVC 4.0, Framework 4.0. Hospedado em Arvixe.
Joe King
20

Eu também estava recebendo esse erro e descobri que "Redirecionamento HTTP" não estava ativado no Windows Server. Esta postagem do blog também indica isso: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

toddkitta
fonte
6
De todas as malditas coisas que poderiam ter sido, é isso. Procurei em todos os lugares e brinquei com as configurações de segurança por algumas horas, aspnet_regiis, e assim por diante. Doce bebê jesus em um rolo friável de kaiser.
Andrew Backer
Passei um dia inteiro por isso. Muito obrigado.
Pradeep
Para o Windows 8, ainda tenho erros depois de ativar o redirecionamento HTTP. Tinha que fazer isso como um segundo passo: Adicionar ASP.NET 4.5 papel em Internet Information Services -> World Wide Web Services -> Destaques Desenvolvimento de Aplicações serverfault.com/questions/514091/...
dreamerkumar
A segunda parada resolveu meu problema. Algumas máquinas funcionam sem ele, mas outras são essenciais. Obrigado.
Alexis Heijmeijer
15

Doce Jesus. Eu tentei todas as coisas acima (mas achei minhas configurações idênticas). AINDA OUTRA SOLUÇÃO, se você estiver tendo problemas:

http://support.microsoft.com/kb/980368

Tente instalar este KB no seu sistema. Se você está vendo 404s, pode ser porque você não possui essa atualização - e o módulo isapi simplesmente não está sendo encontrado e não há muito o que fazer sem isso!

Sean Anderson
fonte
11
Resolvido para mim em um servidor de 32 bits em execução Server 2008 SP2 (não R2)
Simon C
7

Para mim, em uma VM do Azure Server 2012 R2 IIS 8.5 do Azure com um aplicativo Asp.Net MVC 5 (MVC 5 implantado no bin), eu precisava fazer o seguinte em um prompt de cmd elevado, apesar de já ter o 4.5 instalado:

dism /online /enable-feature /featurename:IIS-ASPNET45

Fonte: http://support.microsoft.com/kb/2736284

Também instalei todos os recursos do IIS com o seguinte PowerShell:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

Fonte: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Agora meu aplicativo está funcionando.

Jon Kragh
fonte
O 'dism' funcionou para mim (sem aplicar nenhuma das outras alterações propostas). Eu apenas tive que alternar a opção '/ all' para o final para garantir que todos os recursos 'parent' também estivessem instalados.
Jeroen Ritmeijer
Isso funcionou para mim. A execução do MVC 5 com o .NET 4.5 no Windows Server 2012. Por padrão, o IIS não instala o .NET 4.5.
DPAC
6

Tivemos uma aplicação MVC movida para um novo servidor. O .NET 4 e o MVC 3 foram instalados, mas ainda recebemos o "Erro 403.14". Nesse caso, isso significava que o IIS não entendia que estava lidando com um aplicativo MVC, estava procurando a página padrão.

A solução foi simples: o redirecionamento HTTP não foi instalado no servidor.

Gerenciador de servidores - Funções - Servidor Web (IIS) - Serviços de funções - Redirecionamento HTTP: Não instalado. Instalado, problema resolvido.

Bjarne Havnen
fonte
11
o que é o Gerenciador do Servidor? onde eu encontro?
Elad Katz #
Server Manager está localizado nas Ferramentas administrativas
udog
5

Além disso, se seu aplicativo estiver pré-compilado, você deverá ter

PrecompiledApp.config

na pasta raiz do seu aplicativo, caso contrário, você também pode obter HTTP Error 403.14.

pvasek
fonte
Eu tinha o arquivo lá por algum motivo, mesmo que meu aplicativo não seja pré-compilado. Excluiu o arquivo e ele funciona agora. Obrigado!
vaindil
Eu ficaria muito feliz se eu visse essa resposta antes de passar duas horas e resolvê-la por conta própria ..
SOTN
4

Outra solução possível, se você mover o seu global.asax, verifique se a marcação aponta para a classe MvcApplication correta. Espero que isso salve alguém no futuro.

AaronHS
fonte
4

Eu havia usado a Extensão do IIS WebDeploy para importar meus sites do IIS6 para o IIS7.5, portanto, todas as configurações do IIS estavam exatamente como estavam no ambiente de produção. Depois de tentar todas as soluções fornecidas aqui, nenhuma delas funcionou para mim, eu simplesmente tive que alterar a configuração do Pool de aplicativos do site de Clássico para Integrado.

Michael Bianchi
fonte
4

Eu encontrei o mesmo problema 404.14 de repente. Finalmente, o problema foi corrigido desmarcando "pré-compilar durante a publicação" nas configurações do perfil de publicação.

user985287
fonte
O mesmo aqui. A publicação não era problema até hoje - desmarcar a solução. De qualquer maneira estranha
Sir Rufo
4

Alterei minha rota padrão em um ponto de:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

Para:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index" }

O que me deu seu erro. Ainda bem que alguém mencionou o roteamento, porque eu provavelmente estaria nisso desde sempre.

Nate-Wilkins
fonte
4

No meu caso, o ASP.NET 4.5 não está instalado no servidor, portanto, a instalação do ASP.NET 4.5 corrigiu o problema.

Saif
fonte
4

Você pode resolver esse erro executando o cmd como administrador do que insira a descrição da imagem aqui

Faça o mesmo que na imagem para janelas de 32 bits

Basta fazer alterações em 64 bits como framework64 em vez de apenas framework. Vá para o iis e atualize o site
Se ainda houver algum erro, faça alterações no pool de aplicativos


fonte
3

Eu tive outro problema que levou a esse problema.

  • Eu assegurei que meu pool de aplicativos estivesse executando o .net 4 no modo integrado
  • Eu tinha executado aspnet_regiis.exe -i
  • Eu verifiquei se as permissões de pasta foram definidas corretamente para a conta que está executando meu pool de aplicativos

Nenhuma dessas coisas funcionou. Aconteceu que no meu web.config em system.webserver> modules eu tinha o seguinte:

<remove name="WindowsAuthentication" />

Obviamente, isso removeu o módulo de autenticação do Windows, que parecia de alguma forma derrubar tudo.

Espero que isso ajude alguém, pois isso me custou a maior parte da noite!

Paul Suart
fonte
3

A interface do usuário é um pouco diferente nas versões mais recentes do Windows Server. Aqui é onde você precisa habilitar o ASP.Net para fazê-lo funcionar no IIS

Corrigir IIS e Asp.net

Matthew Zourelias
fonte
2

Adicionando outra solução para esse problema.

no meu arquivo Global.asax.cs, eu havia desativado as tentativas de arquivos php de serem consumidos pelo pipeline MVC usando o seguinte:

routes.IgnoreRoute( "{*php}" );

Eu tinha feito isso anteriormente em um projeto MVC2 e funcionou bem, mas fazer isso no meu aplicativo MVC 3 causou o problema relatado acima.

TheRightChoyce
fonte
2

Outro motivo para isso acontecer - você é RouteConfig.csou WebApiConfig.csé inválido.

No meu caso, eu tinha uma rota definida como tal (observe os parênteses em vez de chaves):

...
routeTemplate: "api/(something}"
...
Terry
fonte
Funciona para mim! Caso eu mudei routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Quando eu fixo id = UrlParameter.Optionalem repositoryId = UrlParameter.Optionalque começar a trabalhar!
Dmitresky
2

Observe que para os usuários do Windows 8, você precisa adicionar / remover componentes do Windows e remover a versão do .net reboot e depois reinstalar para registrá-lo no IIS. Presumo que isso aconteça se você obtiver o .net 4.5 do visual studio e instalar o IIS posteriormente.

Lee.Winter
fonte
2

Por mais estranho que possa parecer, reinstalar o IIS foi o que funcionou para mim, com o seguinte comando executado de dentro da pasta da versão .net:

aspnet_regiis.exe /i

insira a descrição da imagem aqui

Quando executo esse comando, comecei a receber o erro HTTP 403.14. Mas uma vez que executei o comando novamente, ele resolveu o problema.

Obs : Outra coisa que fiz também foi remover o redirecionamento HTTP dos recursos do servidor na tela Gerenciamento de servidor antes de instalar o IIS. Talvez isso também tenha tido um impacto na solução do problema, mas não tenho certeza. Portanto, se a reinstalação do IIS ainda não funcionar, tente remover o redirecionamento HTTP e tente novamente. Espero que também funcione para você.

Ulysses Alves
fonte
A FYI aspnet_regiis.exenão instala ou reinstala o IIS, apenas registra uma versão específica do .NET framework, para que possa ser usada pelo IIS para hospedar aplicativos.
Stephen
1

Para resolver esse problema sem precisar recorrer ao modo de 32 bits, você precisará atualizar o código fonte deste projeto

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

Eu levantei esse problema como uma discussão no quadro de discussão do projeto codeplex na nuvem de TI.

http://itcloud.codeplex.com/discussions/262000

Omar
fonte
1

Isso funcionou para mim e pode ser útil para outro.

Talvez todos os componentes necessários não estejam presentes ou / e nem todos estejam registrados corretamente. Para resolver isso, tente desmarcar todas as opções no Painel de Controle -> Ativar ou desativar os recursos do Windows -> Serviços de Informações da Internet -> Serviços na World Wide Web -> Serviços de Desenvolvimento de Aplicativos, desmarque todas as opções e verifique novamente todas as opções, redefinir o IIS e verifique se o problema está resolvido.

insira a descrição da imagem aqui

MirlvsMaximvs
fonte
1

Se você estiver executando o IIS 8.5 no Windows 8 ou no Server 2012, poderá achar que a execução do mvc 4/5 (.net 4.5) não funciona em um diretório virtual. Se você criar uma entrada de host local no arquivo do host para apontar de volta para a sua máquina local e, em seguida, apontar um novo site do IIS local para essa pasta (com a entrada de cabeçalho de host correspondente), verá que funciona.

Mastro
fonte
0

Criei um novo espaço para nome (e, portanto, pasta) idêntico à rota para um controlador (por exemplo, MvcApp/Test/SomeClasses.cs e MvcApp/Controllers/TestController.cs). Isso resultou também em um 403.14!

Papa Mufflon
fonte
0

Para mim, a solução foi adicionar o pacote NuGet Microsoft.AspNet.WebPages (além das dependências do Razor e Infraestrutura) ao meu projeto da web.

A infraestrutura teve que ser reinstalada à força, pois não foi adicionada como referência a princípio.

Mathieu Diepman
fonte
0

No meu caso, a versão da CRL do .NET no pool de aplicativos prppertires foi definida como Sem código gerenciado (não sei por quê). A configuração para .NET CRL versão v4.0.30319 resolveu o problema.

Eugene Rozhkov
fonte