Erro HTTP MVC4 403.14 - Proibido

88

Eu construí um aplicativo da web .net4.5 ASP.NET MVC4 que funciona bem localmente (servidor IIS Express e dev), mas quando eu implanto no meu servidor web, ele lança o erro 403. Eu instalei o .Net 4.5RC no servidor e até tentei o aspnet_regiis -i bit que todos recomendaram para seus problemas com as versões anteriores do MVC / .Net, mas não ajudou.

Alguma ideia?

EDITAR : Mais informações sobre a situação. O servidor é de 32 bits e eu tenho 4 outros aplicativos MVC3 que funcionam bem. É apenas meu aplicativo MVC4 que não está funcionando.

mithun_daa
fonte
Eu tive esse mesmo problema quando criei um novo aplicativo de formulários da Web do asp.net 4.5 . Funcionou bem localmente (IIS 7.5), mas quando implantado no servidor de teste (também IIS 7.5), a maioria dos meus arquivos javascript e css agrupados e minimizados não carregavam com 404 Not Found. A resposta abaixo sobre runAllManagedModulesForAllRequests resolveu o problema para mim!
ClearCloud8
Posso ter respondido a esta pergunta em: stackoverflow.com/questions/24343788/…
fsbf
<system.webServer> <modules runAllManagedModulesForAllRequests = "true" /> </system.webServer>
Jinto John,

Respostas:

172

Experimentar

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

Através da

/server/405395/unable-to-get-anything-except-403-from-a-net-4-5-website

MarkKGreenway
fonte
1
Tive isso no lugar, fiz tudo, e ainda assim apenas sites MVC 4 funcionam. Tem que haver algum outro truque que precisa ser usado para que isso funcione.
Maxim V. Pavlov de
1
Este. Tentei todas as outras soluções de estoque sem nenhuma alegria, mas foi essa que resolveu o problema.
Julia Hayward
1
Caro amigo, eu faço, mas não funciona. Realmente estava trabalhando com MVC 4 e VisualStudio 2012, meu projeto funciona bem até ontem, mas depois de algumas mudanças usuais nos meus códigos, esse erro aumentou na página padrão (home / index).
Alguém
4
Esta correção não é apropriada para este problema (consulte o link na resposta de Jason Koopmans). muito melhor é baixar o hotfix relacionado aqui microsoft.com/en-us/download/…
Ahmad Ibrahim
@AhmadIbrahim é na verdade uma solução para o problema. A correção é apenas para 64 bits, a questão afirma claramente 32 bits. Existem certas configurações para as quais RAMMFAR é a solução de trabalho mais confiável e adiciona carga mínima ao servidor se os CDNs forem usados ​​apropriadamente.
MarkKGreenway
22

O erro 403.14 é o código de erro HTTP por não ter permissão para listar o conteúdo de um diretório. Certifique-se de que

  1. Você configurou o site como um aplicativo no IIS
  2. Você tem .NET 4.5 instalado no servidor
  3. Você configurou o pool de aplicativos para executar a versão adequada do .NET framework (ou seja, não está configurado para .NET 2.0
  4. Você está usando o pipeline integrado em seu pool de aplicativos
  5. O .NET 4.5 está realmente registrado no IIS. Por favor, veja esta postagem para um problema / resolução semelhante

Normalmente, a e d são os maiores problemas em torno das implantações MVC para IIS

Tommy
fonte
1. Não configurei o site como um aplicativo. 2. Eu tenho .net 4.5 instalado, 3.tinha meu pool de aplicativos visando a estrutura correta. 4. Minha piscina foi configurada para usar o clássico, mudei para Integrado, mas não ajudou. 5. Tenho certeza de que 4.5 está registrado.
mithun_daa
1
@mithun_daa - Se você não configurou seu site como um aplicativo, é muito fácil -> clique com o botão direito do mouse no diretório virtual / site e Converter em aplicativo (ou adicione aplicativo, terminologia me escapa no momento)
Tommy
Isso é uma coisa específica do MVC4? Porque eu nunca configurei meus projetos MVC3 como aplicativos e eles funcionam muito bem.
mithun_daa
Pode ser como você está implantando então -> mas qualquer aplicativo da web .NET deve ser definido como um aplicativo no IIS. No entanto, se você estiver apenas colocando-os no site padrão, eles estarão sendo executados no aplicativo padrão do site. Certifique-se de que o pool de aplicativos do site padrão esteja configurado corretamente (.NET 4 / integrado). Ao criar um diretório / site virtual virtual no IIS, você também tem a opção de configurá-lo para seu próprio aplicativo.
Tommy
Provavelmente te confundi, mas nenhum dos sites está no site padrão. Clico com o botão direito em "Sites" no IIS7 e escolho "Adicionar Web Site". É assim que tenho feito.
mithun_daa
11

Talvez ... Se acontecer de você usar o Assistente de Publicação (como eu fiz) e selecionar a caixa de seleção "Pré-compilar durante a publicação" (como eu fiz) e ver os mesmos sintomas ...

Sim, eu me bati na cabeça, mas depois de desmarcar esta caixa, uma configuração aparentemente não relacionada, todos os sintomas descritos desaparecem após a redistribuição.

Esperançosamente, isso corrige algumas pessoas.

Brian Kirkpatrick
fonte
Se você estiver tendo isso, uma possível causa raiz é ter uma versão diferente de uma biblioteca externa no ambiente de produção. Eu tive meu aplicativo mvc compilado com uma versão mais recente de uma dll de terceiros e uma versão mais antiga no servidor de produção.
ValGe
Um brinde ao garoto maravilha, o garoto, o milagroso, o fenômeno, o imparável, o rei, um brian Kirkpatrick senhoras e senhores
Luis Villarroel
10

Windows-> Iniciar -> Ativar e desativar recursos de viúvas

Certifique-se de verificar as opções necessárias em

insira a descrição da imagem aqui

Kurkula
fonte
6

Antes de aplicar

runAllManagedModulesForAllRequests="true"/>

considere o link abaixo que sugere uma alternativa menos drástica. Na postagem, o autor oferece a seguinte alteração ao web.config local:

  <system.webServer>
    <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

Jason Koopmans
fonte
Esta é a verdadeira resposta. Obrigado!
Spivonious de
5

Existe um Refactor -> Renomear Bug no Visual Studio 2012 que renomeou incorretamente o "id" dentro do valor da string literal do parâmetro url em meu RouteConfig.cs. Isso causou um 403.14 em uma configuração nova e correta no Windows Server 2012 e no Windows Server 2008 R2.

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

foi alterado para

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{renamed_text}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
user641770
fonte
Para mim, descobri há muito tempo que posso entrar null o nameparâmetro para evitar inventar um nome para cada rota. Acontece que isso também causa um 403 às vezes (somente em nosso ambiente de produção, Win Server 2008 R2 executando .NET 4.5.1, MVC 5 em um projeto VS2013. Para resolver, adicionei um nome para cada rota.
tristankoffee
2

Você também pode obter um 403 se, ao testar com o servidor de desenvolvimento, estiver usando pipeline integrado e, em seguida, instalar como modo de pipeline clássico em seu servidor web IIS 7.5 ativo, também estava faltando minha pasta app_data, que também era necessária

Marcusdev
fonte
2

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

Mastro
fonte
Por que postar a mesma resposta em vários lugares?
devnull
8
Porque eu estava tentando rastrear a solução, e ela se aplica a ambos. Salve alguém de caçá-lo.
Mastro
Você não deve postar respostas duplicadas. Isso é tudo o que posso dizer.
devnull
1
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 
 </system.webServer>

Você pode usar o código acima

Jinto John
fonte
1

Eu tinha definido o pool de aplicativos do novo aplicativo para o DefaultAppPoolIIS, que obviamente está usando o Classicpipeline com .NET v.2.0.

Para resolver o problema, criei um novo App Pool usando o Integratedpipeline e .NET v4.0. apenas para este novo aplicativo e então tudo começou a funcionar conforme o esperado.

Não se esqueça de atribuir esse novo pool de aplicativos ao aplicativo. Selecione o aplicativo no IIS, clique em Basic Settingse escolha o novo pool de aplicativos para o aplicativo.

Leniel Maccaferri
fonte
0

o que vejo com mais frequência recentemente é o IIS e permitindo a execução de aplicativos de 32 bits

É isso que você tentou. caso contrário, precisamos de mais informações sobre a produção e as versões do servidor de desenvolvimento

MarkKGreenway
fonte
Sinto muito, mas não segui o que você quis dizer. Este é um servidor de 32 bits. Eu atualizei minha postagem para adicionar mais informações.
mithun_daa
Ahhh ... Eles estão em app_pools separados?
MarkKGreenway
Sim, de fato, cada um dos meus sites tem seus próprios pools de aplicativos.
mithun_daa
0

Eu tenho um problema um pouco diferente, no servidor 2012 de alguma forma esqueci de habilitar o asp.net 4.5, então se você tiver esse problema, verifique se você o habilitou.

Volodymyr Bilyachat
fonte
0

Estou executando o Windows Server 2012 R2 no Azure e ASP.NET 4.5, IIS 8

Resolvi esse problema desinstalando todos os itens ASP.NET em Programas e Recursos e, em seguida, reinstalando o ASP.NET assim com o Gerenciador de Servidores usando Adicionar Funções e Recursos: escolha a instalação baseada em funções ou recursos, selecionei meu servidor e, em seguida, em Selecionar função do servidor, escolha Servidor Web (IIS) / Servidor Web / Desenvolvimento de aplicativos, clique em ASP.NET 4.5, confirme a instalação de um pré-requisito e reinstale o ASP.NET 4.5.

Minhas pesquisas anteriores me levaram a acreditar que o problema realmente se origina de um problema de registro com ASP.NET. Com versões anteriores do ASP.NET, há na verdade um utilitário que você pode executar para registrar o ASP.NET sem reinstalar, mas que parece não estar mais disponível.

fsbf
fonte
0

Resolvi o problema abrindo o visual studio, expandindo as referências e alterando a propriedade "Copy Local" para "True".

Eu descobri isso comparando as dlls da versão antiga com as dlls da minha nova versão (que não estava funcionando)

Wagner
fonte
0

No meu caso, a página padrão do meu aplicativo era index.html, que estava faltando nas opções de documento padrão. Adicioná-lo corrigiu o erro 403.14 Proibido.

Erik K.
fonte
0

No meu caso, o problema foi causado por ActionFilterAttribute personalizado, que era uma espécie de atributo de filtro global. O atributo instanciou um serviço por meio do Autofac, mas o serviço travou no construtor:

public ActionFilterAttribute()
{
    _service = ContainerManager.Resolve<IService>();
}

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}
Artem Vertiy
fonte
0

No meu caso, nem os recursos do Windows nem aspnet_regiis -inão funcionaram. Depois de horas pesquisando na Internet, criei minha própria solução:

  1. No Gerenciador do IIS em Módulos, alterei herdar para local no nó UrlRoutingModule-4.0:

    insira a descrição da imagem aqui

  2. Em web.config, colei uma combinação de algumas dicas deste fórum:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="UrlRoutingModule-4.0"></remove>
            <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""></add>
        </modules>
    </system.webServer>

Espero que ajude

Sylwia M
fonte