O pacote CSS do ASP.NET MVC framework 4.5 não funciona na hospedagem

144

Estou executando um aplicativo no porto de aplicativos escrito em MVC4.

Um pacote de arquivos css não funciona. No meu computador local, no modo de depuração, vejo o código do aplicativo e os arquivos. O aplicativo funciona conforme o esperado.

<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>

Quando carrego o aplicativo no Appharbor, vejo o pacote no código, mas o aplicativo não funciona.

<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>

Quando navego nesse link, hrefrecebo 403 - Proibido: acesso negado.

Como solucionar isso?

Ricardo Polo Jaramillo
fonte
Não tenho certeza se você resolveu esse problema, mas este artigo corrigiu o meu. stackoverflow.com/a/18474844/955831 #
9788 Jason

Respostas:

284

Meu palpite é que o caminho Content/cssexiste no disco do seu aplicativo. Nesse caso, o IIS manipularia a solicitação, não o MVC.

Verifique se o caminho virtual para o pacote configurável (o parâmetro do construtor StyleBundle) não corresponde a uma pasta no sistema de arquivos.

Dos comentários:

"Uma boa convenção a seguir ao criar pacotes configuráveis ​​é incluir" pacote configurável "como prefixo no nome do pacote configurável. Isso evitará um possível conflito de roteamento."

Paulo
fonte
2
obrigado. É normal que funcione quando em execução no host local?
Ricardo Polo Jaramillo
3
Thnaks para esta resposta - estava me deixando louco!
Rich Turner
8
@RicardoPolo, por "localhost", você quer dizer executando-o no iis express em sua máquina de desenvolvimento? Então, sim, é normal que funcione lá, porque você provavelmente está executando no modo de depuração, o que desativa o agrupamento.
precisa saber é o seguinte
1
Obrigado, isso foi me deixando louco hoje
Xingyu
11
+1 Esta resposta me ajuda a entender como os caminhos virtuais funcionam com o pacote. Eu li a postagem original no msdn ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ), mas depois de resolver meu problema com sua resposta, encontrei no final da postagem um pouco de texto falando sobre virtual path: "Uma boa convenção a seguir ao criar pacotes configuráveis ​​é incluir" pacote configurável "como prefixo no nome do pacote configurável. Isso evitará um possível conflito de roteamento.". Penso que esta frase DEVE ter sido colocada em negrito com uma imagem de aviso vermelha / amarela. : D Obrigado!
Samuel
45

Esse problema é por padrão. O .NET não "processa" solicitações que tenham uma extensão .js ou .css.

Existem duas correções para isso (você só precisa fazer UMA)

A) Remova as extensões dos nomes dos pacotes. (recomendado) Isso fará com que o .NET processe a solicitação e execute-a no BundleModule.

B) Adicione isso ao seu web.config na seção system.webServer , que fará com que o .NET execute solicitações .js e .css por meio do BundleModule.

<modules runAllManagedModulesForAllRequests="true">
  <remove name="BundleModule" />
  <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

Um grande grito a Ray Moro, que descobriu a causa real e a compartilhou comigo no meu blog: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html

cdeutsch
fonte
Atualizado com mais informações sobre a causa raiz e uma segunda opção.
Cdeutsch
1
Eu estava tendo esse problema porque o nome do meu pacote era um nome parecido com uma pasta que terminava em "css". Embora meu pacote não tenha exatamente uma extensão de arquivo, a sugestão A me levou ao problema.
dsnunez
1
Esta deve ser a resposta correta, ajuda-me com o mesmo problema.
Psulek
grande resposta que me ajudar
DKR
Essa coisa com os desaparecidos <module> seção de web.config oh homem ...
XDS
19

Também aconteceu comigo quando tentei implantar meu aplicativo ASP.NET MVC no AppHarbor.

Eu tinha um pacote de folhas de estilo com o nome

@Styles.Render("~/Content/bootstrap")

e a estrutura da pasta foi

- Conteúdo

- Conteúdo \ Bootstrap \ ...

Apenas alterando o nome do pacote para o "~/Content/bootstrap-css"meu problema foi resolvido novamente.

Yasser Shaikh
fonte
15

Eu sei que estou com 4 anos de atraso para esta pergunta, mas isso funcionou para mim.

public static void RegisterBundles(BundleCollection bundles)
{
   ...

   BundleTable.EnableOptimizations = true;     // Added this           
}
RayLoveless
fonte
2
De todas as respostas acima e abaixo. Este é o único que funcionou para mim.
Haim Katz
3
Isso permite otimizações quando você está no modo de depuração. Embora essa seja uma ótima maneira de verificar se os pacotes configuráveis ​​funcionam em uma máquina de desenvolvimento, você não deve deixar essa instrução no seu código.
Rudey 28/02
9

403 erro resolvido. Aqui está uma explicação detalhada e solução para o erro 403.
A solução é demonstrada para o pacote CSS. No entanto, isso também se aplica ao JavaScript.

http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved

Em poucas palavras, verifique se o caminho virtual [Script | Style]Bundle("~/content/[script | css]")não corresponde a uma pasta no sistema de arquivos (por exemplo C:\approot\Content\[script | css])[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")

yantaq
fonte
2
Obrigado, este é o problema que experimentei. Para resolvê-lo, no BundleConfig.cs, alterei o caminho de @ Styles.Render ("~ / Content / css") para @ Styles.Render ("~ / bundles / css"). Agora ele funciona quando executado localmente no modo de depuração e quando publicado no modo de liberação ou depuração.
Ken Palmer
Boa resposta, mas você não deve deixar apenas um link, pelo menos as etapas básicas deste artigo seriam ótimas aqui, caso o site vinculado esteja inoperante.
Vitor M. Barbosa
5

Resolvi o problema adicionando abaixo a linha de código na classe BundleConfig

BundleTable.EnableOptimizations = false;
Ye Yint
fonte
3

O que eu faço é muito simples,

Eu adiciono "js" no final do ScriptBundle da seguinte forma: new ScriptBundle ("~ / bundles / appjs") E eu adiciono "css" no final do StyleBundle da seguinte forma: new StyleBundle ("~ / content / appcss")

Os nomes das minhas pastas nunca terminam com "js" ou "css".

Isso deve resolver.

abelabbesnabi
fonte
2

Isso também se aplica à 'classe ScriptBundle', verifique se o 'nome do parâmetro' para o construtor não corresponde a um caminho no sistema de arquivos do aplicativo da web. Lembre-se de que o IIS tentará fornecer o arquivo / solicitação.

William
fonte
1

O problema também pode vir do arquivo que está sendo criptografado. Isso ocorreu quando baixei o BootStrap e usei os arquivos fornecidos. Eles mostraram verde no Windows Explorer e funcionaram bem no Visual Studio, mas quando implantados, recebi um erro 403.

Você pode ver se eles estão criptografados acessando propriedades, propriedades avançadas e há uma caixa de seleção criptografada.

Desmarque e não será mais um problema.

Greg Gum
fonte
0

Eu tenho o mesmo problema com esse erro (403 proibido). No meu caso, o motivo é que o servidor proxy em minha organização bloqueia meu arquivo css. O nome do arquivo CSS corresponde a uma das regras de bloqueio.

Konstantin Orlov
fonte
0

Eu descobri que o arquivo bootstrap.css não estava na pasta de conteúdo, então procurei nos pacotes e colei lá .. funcionou!

Majid ALSarra
fonte