O ASP MVC no IIS 7 resulta em: Erro HTTP 403.14 - Proibido

146

Estou desenvolvendo um projeto web ASP MVC. Agora eu tenho um requisito que me obriga a implantar em um IIS7 no meio do desenvolvimento (para verificar alguns recursos). Estou recebendo a mensagem de erro acima mencionada sempre que tento digitar o URL do site. (Nota: máquina de desenvolvimento: Vista Home Premium, IIS7)

O que eu fiz até agora:

Editado o arquivo HOSTS (C: \ WINDOWS \ system32 \ drivers \ etc \ hosts).

Coloque dois domínios nele (127.0.0.1 domain1.com e 127.0.0.1 domain2.com).

Criou uma pasta c: \ websites \ dirOfApplication e implantada no Visual Studio 8 para esta pasta.

No IIS7, criou um novo site com o nome do host domain1.com e a pasta do aplicativo acima.

Digitar o endereço domain1.com no navegador da Web resulta no erro acima (Erro HTTP 403.14 - Proibido - O servidor da Web está configurado para não listar o conteúdo deste diretório.)

Acho que estou perdendo alguma coisa, mas não sei o que! Tentou implantar os arquivos System.Web.Mvc, System.Web.Abstraction e System.Web.Routing com o mesmo resultado. Sempre que tento pressionar F5 e executar o aplicativo, ele funciona bem!

savvas sopiadis
fonte
possível duplicata do ASP.NET MVC no IIS 7.5
Fenton

Respostas:

224

Talvez seja útil para alguém: depois de converter meu aplicativo no MVC 4 com o .NET Framework 4.5 e instalar a estrutura no meu servidor com o IIS 7.0, encontrei o mesmo erro 'proibido' mencionado na pergunta. Tentei todas as opções descritas acima sem sucesso, quando notei o

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

estava faltando no meu web.config. Depois de adicionar isso, tudo funcionou. Simples, mas fácil de esquecer ...

EDITAR:

Obviamente, a solução acima funcionará, mas é realmente um desperdício de recursos. Eu acho que é melhor adicionar o módulo de roteamento, como apontado por Chris Herring nos comentários.

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
Cyril Mestrom
fonte
2
Acontece que quando eu desinstalei um pacote NuGet, ele o removeu runAllManagedModulesForAllRequests="true"do meu Web.config. Obrigado por mencionar isso antes de eu passar a noite toda tentando descobrir isso.
Schmalls
3
ISTO!! Arrrrgh Passei / desperdicei o dia inteiro tentando fazer isso funcionar até encontrar sua resposta, obrigado! O que é estranho é que ele seria executado em IIS na minha máquina local muito bem, mas não na caixa de produção e ambos são IIS7.5 correndo
Glenn Slaven
1
Foi isso. Às vezes, a desinstalação do Cassette Nuget o remove. Obrigado.
Zachary Scott
8
tentar evitar o uso dessa configuração, adicionando o módulo de roteamento - britishdeveloper.co.uk/2010/06/...
Chris Herring
6
Adoro a resposta do comentário "Talvez seja útil para alguém" ... lol ... Parece que é útil para MUITAS pessoas, inclusive eu.
Paul
126

Respondida no SO aqui , pergunta: 403 - Proibido na implantação básica do MVC 3 no iis7.5

Corra aspnet_regiis -i. Muitas vezes, descobri que você precisa fazer isso para que os aplicativos 4.0 funcionem. Abra um prompt de comando como um Administrator(clique com o botão direito do mouse no ícone do prompt de comando e selecione Executar como Administrador):

cd \
cd Windows\Microsoft.NET\Framework\v4.xxx.xxx
aspnet_regiis -i

Depois de instalado e registrado, verifique se o aplicativo está usando um pool de aplicativos definido como .NET 4.0.

UPDATE: Acabei de encontrar um problema com este comando. O uso de -i atualizou todos os pools de aplicativos para o ASP.NET 4.0.

Usar aspnet_regiis -irinstala a versão do ASP.NET, mas não altera nenhum aplicativo Web para esta versão. Você também pode revisar a opção -iru.

Brettski
fonte
Trabalhou para mim também. Depois de executar o comando aspnet_regiis -i, o UrlMappingModule foi instalado no IIS.
Manish Gupta
Depois de instalar o IIS, eu precisava executar o aspnet_regiis para fazer tudo funcionar, mesmo que o .NET 4 parecesse já estar registrado.
18715 Brian
Se a estrutura foi instalada antes do IIS, sim, você precisará aspnet_regiis.
Brettski
2
Não esqueça que para um sistema de 64 bits é "Framework64". Ou seja, Windows \ Microsoft.NET \ Framework64 \ v4.xxx.xxx
grahamesd
Para esse uso, a versão de 64 ou 32 bits do aspnet_regiis não importa. Alguns casos especiais estão listados aqui: msdn.microsoft.com/en-us/library/k6h9cz8h.aspx#Anchor_1
Brettski
34

Eu também encontrei esse erro. Toda a configuração e permissões estavam corretas. Mas eu esqueci de copiar o Global.asax para o servidor, e foi isso que deu o erro 403.

Bogdan Litescu
fonte
No meu caso, eu o movi acidentalmente com o mouse sem perceber. Obrigado!
Mathias Lykkegaard Lorenzen
Perdi duas horas porque tinha esquecido de copiar esse arquivo, depois de limpar minha pasta de documentos da web!
Steven Sproat
10

É por ter muita certeza do que você (eu) está fazendo!

Na minha máquina, o IIS 7 está instalado, mas o componente ASP.NET necessário (Painel de Controle-> Programas-> Ativar / Desativar-> ASP.NET) não estava.

Então, instalar isso resolveu o problema

savvas sopiadis
fonte
9

Eu tive o mesmo problema. Este artigo de suporte da Microsoft o corrigiu para mim.
https://support.microsoft.com/en-us/help/2023146/mvc-2-and-asp.net-4-web-forms-applications-that-use-url-routing-might-return-http- 404 erros quando tentam processar URLs sem extensão no iis-7-e-iis-7.5

Na caixa de diálogo "Ativar ou desativar os recursos do Windows" do aplicativo "Programas e Recursos" do Painel de Controle do Windows, execute as seguintes etapas:

  1. Navegue para o seguinte nó: Internet Information Services -> Serviços da World Wide Web -> Recursos HTTP comuns
  2. Verifique se a opção "Redirecionamento de erro HTTP" está selecionada.

-ou-

  1. Navegue para o seguinte nó: Internet Information Services -> Serviços na World Wide Web -> Performance Features
  2. Verifique se a opção "Compactação de conteúdo estático" está selecionada. Depois de selecionar qualquer uma das opções, clique em "OK" para salvar as alterações.

A reativação do módulo HTTP Error Redirection ou do módulo Static Content Compression garante que o ASP.NET e o IIS sincronizem corretamente os eventos do pipeline HTTP. Isso permite que o módulo de roteamento de URL processe URLs sem extensões.

Donny V.
fonte
7

Tente aplicar as seguintes configurações mostradas abaixo:

1) Dê a permissão necessária ao IIS_IUSRSusuário IIS Server(clique com o botão direito do mouse no site e depois em Editar permissões> Segurança).

insira a descrição da imagem aqui

2) Se você usar .NET Framework 4, verifique se a versão do .NET Framework está v4.0na Application Poolque seu site usa.

insira a descrição da imagem aqui

3) Abra o prompt do Commanp administratore execute o iisresetcomando para reiniciar IIS Server.

Espero que isto ajude...

Murat Yıldız
fonte
Dica: Se você ainda receber os erros de permissão após isso, talvez seja necessário executar uma configuração iisreset no cmd como Admin depois de fazer isso para que o site seja executado no IIS.
Cory Koch
6

No meu caso, a seguinte abordagem me ajudou:

  1. aspnet_regiis -i no Windows\Microsoft.Net\Framework

  2. Adicionando módulos ao system.webServer

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        ...
    </system.webServer>
Stefan Michev
fonte
Suponho que você tenha omitido a estrutura. Mas cmd aberto como administrador, e executar aspnet_regiis -i no Windows \ Microsoft.Net \ Framework \ v4.0.30319
DeadlyChambers
5

Verifique também, se você estiver executando o x64, se você ativou aplicativos de 32 bits nas configurações do pool de aplicativos

insira a descrição da imagem aqui

David Christiansen
fonte
3

Na opção Desmarcar "Pré-compilar durante a publicação" - eu estava recebendo o erro 403.14 em um serviço da Web que acabei de escrever no VS2015, então o reescrevi no VS2013 e estava recebendo o mesmo erro. Nos dois casos, eu tinha "Pré-compilar durante a publicação". Desmarquei, mas ainda estava recebendo o erro. No meu caso, eu também tinha " Excluir todos os arquivos existentes antes da publicação ", mas não estava excluindo tudo do diretório de destino no servidor antes de copiar os novos arquivos publicados lá. Se você não fizer isso - um arquivo " PrecompiledApp.config " será deixado para trás, causando o problema. Depois de excluir esse arquivo, fiquei com o ouro nas versões VS2013 e VS2015 do meu serviço da web.

JTTx
fonte
2

Eu tentei de tudo aqui; nada funcionou. Problema estava no meu Web.configarquivo, de alguma forma a ligação de assembly dependente foi alterada do mínimo 1para o mínimo 0.

<!-- was -->
<runtime>
    <assemblyBinding>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" />
                <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />


<!-- should have been -->
                <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
codeMonkey
fonte
1

Observe que algumas vezes errado Managed pipeline modecausa esse erro. Existem duas opções para selecionar integratede classic.

Joe.wang
fonte
1

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

Este erro ocorre quando você tem o MVC 2+ em execução hospedado no IIS 7+, isso ocorre porque o ASP.NET 4 não estava registrado no IIS. No meu caso, eu estava criando um projeto MVC 3 e hospedando-o no IIS 7.5.

Para corrigi-lo, verifique se você possui o MVC 2 ou superior e o .Net Framework 4.0 instalado, execute um prompt de comando como administrador e digite a seguinte linha:

32 bits (x86)

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

64 bits (x64)

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

Vishal Sen
fonte
1

Verifique seu arquivo Global.asax . No meu caso, estava vazio.

oyenigun
fonte
1

Se as principais respostas não funcionarem, procure uma configuração nomeada PrecompiledApp.configno diretório de hospedagem e exclua-a, se existir. Este arquivo impede que IISExpress e LocalIIS funcionem corretamente. (E acho que é um bug) O conteúdo do arquivo no meu caso foi:

<precompiledApp version="2" updatable="true"/>

E tenho 100% de certeza de que foi o problema do meu caso, pois tentei tudo em 2 horas e testei várias vezes com essa configuração.

Mais uma coisa: você não pode usar aspnet_regiisnas versões mais recentes do Windows e IIS, então tente

dism /online /enable-feature /featurename:IIS-ASPNET45 /all
sotn
fonte
1

Painel de controle> ativar ou desativar os recursos do Windows> Servidor Web> Desenvolvimento de Aplicativos

Verifique o ASP.NET

Andres Kalev Rebane
fonte
0

Eu também encontrei esse mesmo erro, apesar de todas as soluções fornecidas pelos seguintes motivos:

  • DLLs ausentes
  • A cadeia de conexão do banco de dados aponta para um servidor inacessível.
eulerfx
fonte
0

No meu caso, web.config e todos os arquivos, exceto a pasta / bin, estavam ausentes (não copiados de alguma forma).
Bobo, mas essa foi a última coisa que verifiquei.

eitanpo
fonte
0

Recentemente, tive esse erro e descobri que o problema foi causado pelo recurso "Redirecionamento HTTP" não estar ativado no meu Windows Server. Esta postagem do blog me ajudou a solucionar os problemas para encontrar a resposta (apesar de ser versões mais antigas do Windows Server): http://blogs.msdn.com/b/rjacobs/archive/2010/06/06/30/system-web-routing-routetable -not-working-with-iis.aspx para servidores mais recentes, vá para Gerenciamento do computador, role para baixo até a função Servidor da Web e clique emadd role services

Seph
fonte
0

Com o projeto ASP.NET com C # 4.5, resolvi esse problema instalando a extensão ASP.NET no Web Platform Installer

Kamil Gareev
fonte
0

Também mais uma coisa pode ser possível

instale o .net framework 4.0 manualmente

Esta solução é para o IIS7 na janela 7

cmd aberto com privilégios de administração

vá para o diretório "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319"

tipo aspnet_regiis.exe -i

chegou ao seu gerenciador de inet digitando o comando run "inetmgr"

atualize seu IIS7

recarregar o site.

Iftikhar Ali Ansari
fonte
0

Sei que você teve esse problema em um host interno, mas já havia experimentado esse problema em um host externo e, no meu caso, tinha sua própria resolução, talvez economizasse o tempo de alguém:

Na verdade, meu site foi INTERROMPIDO por algum motivo que atualmente não conheço, para verificar se você tem o mesmo problema, na página principal do WebsitePanel, vá para Web -> Sites e selecione o nome de domínio do seu site na lista , depois disso, no lado direito da página que acabou de abrir, verifique se você vê a palavra INICIADO; caso contrário, se você vê a palavra PARADO, faça com que ela comece novamente. Isso é tudo.

Mohammad Musavi
fonte
0

Sei que esse é um tópico antigo, mas você também pode receber esse erro (quando estiver depurando) se tiver uma pasta com o mesmo nome de uma rota em um controlador.

Por exemplo, se você tiver um UserController, com uma rota chamada / User e também tiver uma pasta na sua solução chamada "User", o IISExpress tentará procurar a pasta em vez de mostrar sua exibição.

MercifulGiraffe
fonte
0

Depois de tentar todas as soluções sugeridas aqui, encontrei outra solução possível: URLScan

O IIS desativou o WebDAV, mesmo no web.config do meu aplicativo, o manipulador e o módulo do WebDAV foram removidos. PUTs ainda retornaram um 403 - Proibido sem nenhuma entrada de log nos logs do IIS. (GET / POST funcionou bem).

Acontece que o IIS tinha um filtro ISAPI ativo (o URLScan) ativado, o que impedia todas as PUTs. Depois de remover o URLScan, funcionou para mim.

Felix Beifuß
fonte
0

Minha situação era completamente diferente de qualquer uma delas e a mensagem de erro 403: Proibida era um arenque vermelho.

Se sua função Application_Start () no módulo Global.asax tentar acessar o web.config e uma entrada referenciada não estiver lá, o IIS bloqueará e (por algum motivo) lançará a mensagem de erro 403: Proibida.

Verifique se não está faltando uma entrada no arquivo web.config que está tentando ser acessado no seu módulo Global.asax.

Jason Marsell
fonte
0

Caso você seja como eu e tenha um aplicativo usando o NHibernate, as respostas acima não resolveram o seu problema.

Você deve olhar para a cadeia de conexão no seu aplicativo; possivelmente no arquivo webconfig para garantir que esteja correto.

wale A
fonte
-1

Eu tenho usado o Identity Representate:

<system.web>
    <identity impersonate="true" userName="domain\username" password="password"/>
</system.Web>

Ao acessar o servidor, você deve conceder ao nome de usuário acesso à Temporary ASP.NETpasta Arquivos para que ele possa ler / gravar / executar corretamente:

C:\Windows\Microsoft.NET\"frameworkversion"\"aspversion"\Temporary ASP.NET Files

Obviamente, substitua "frameworkversion" e "aspversion" pelas versões que você está usando.

dalemac
fonte
-1

Etapa 1: selecione o site para o qual o erro HTTP é produzido no IIS e clique em Navegação em diretório, como mostra a imagem abaixo:

Etapa 2: Na janela Navegação de diretório no IIS, clique em Habilitar em ações no lado direito, como mostra o diagrama abaixo:

Agora a Navegação em Diretório está ativada para o site asp.net, basta reiniciar o aplicativo Web no IIS e Navegar no site no navegador e ver o resultado.

user3589806
fonte
-1

Estou usando: Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5

Se nenhuma das opções acima funcionou, tente o seguinte:

Desmarque a opção "Pré-compilar durante a publicação"

Isso chutou minha bunda por alguns dias.

D. Kermott
fonte
@ d-kermott, pode ser meu [find] [( stackoverflow.com/a/31319136/912481 ) também seria útil para você também?
Kamil Gareev
-1

Eu tive esse problema, mas ele foi corrigido facilmente, acessando o Gerenciador de Serviços de Informações da Internet (IIS), clicando duas vezes em Navegação em Diretório e em Ativar.

No meu caso, eu podia acessar arquivos diretamente, mas não conseguia acessar pastas.

Scott Izu
fonte
-1

Eu tinha digitado errado o endereço IP em um dígito, o que significava que ele estava indo para um dos meus outros servidores. Muito confuso quando você obtém uma página de erro do .NET, mas da máquina errada!

NickG
fonte