호스팅에서 ASP.NET MVC 프레임 워크 4.5 CSS 번들이 작동하지 않습니다


144

MVC4로 작성된 앱 하버에서 앱을 실행 중입니다.

CSS 파일 번들이 작동하지 않습니다. 디버그 모드의 로컬 컴퓨터에서 앱 코드가 표시되고 파일이 표시됩니다. 앱이 예상대로 작동합니다.

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

Appharbor에 앱을 업로드하면 코드에 번들이 표시되지만 앱이 작동하지 않습니다.

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

에서 해당 링크를 탐색 href하면 403-금지됨 : 액세스가 거부됩니다.

이 문제를 해결하는 방법은 무엇입니까?


이 문제를 해결했는지 확실하지 않지만이 기사에서 문제를 해결했습니다. stackoverflow.com/a/18474844/955831
Jason Foglia

답변:


284

내 추측은 경로 Content/css가 앱의 디스크에 존재한다는 것입니다. 이 경우 IIS는 MVC가 아닌 요청을 처리합니다.

번들의 가상 경로 (StyleBundle 생성자의 매개 변수)가 파일 시스템의 폴더와 일치하지 않는지 확인하십시오.

의견에서 :

"번들을 만들 때 따라야 할 좋은 규칙은"번들 "을 묶음 이름에 접두사로 포함시키는 것입니다. 이는 라우팅 충돌 가능성을 방지합니다."


2
감사. 로컬 호스트에서 실행될 때 작동하는 것이 정상입니까?
Ricardo Polo Jaramillo

3
이 답변에 대한 Thnaks-나를 미치게했다!
Rich Turner

8
"localhost"의 @RicardoPolo는 개발 머신에서 iis express로 실행하는 것을 의미합니까? 그런 다음 번들 모드를 비활성화하는 디버그 모드에서 실행 중일 가능성이 높으므로 정상적으로 작동하는 것이 정상입니다.
bvgheluwe

1
감사합니다. 오늘 오늘 미쳤습니다
xingyu

11
+1이 답변은 가상 경로가 번들링과 함께 작동하는 방식을 이해하는 데 도움이됩니다. msdn의 원래 게시물 ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification )을 읽었 지만 답변으로 문제를 해결 한 후 게시물 끝에 가상에 대해 이야기하는 약간의 텍스트를 발견했습니다. 경로 : "번들을 만들 때 따라야 할 좋은 규칙은 번들 이름에 접두사로"번들 "을 포함시키는 것입니다. 이것은 라우팅 충돌 가능성을 방지합니다." 이 문장은 빨간색 / 노란색 경고 이미지로 굵게 표시되어야합니다. : D 감사합니다!
사무엘

45

이 문제는 기본적으로 .NET은 확장자가 .js 또는 .css 인 요청을 "처리"하지 않습니다.

이에 대한 두 가지 수정 사항이 있습니다 (하나만 수행하면 됨).

A) 번들 이름에서 확장명을 제거하십시오. (권장) 이로 인해 .NET은 요청을 처리하고 BundleModule을 통해 요청을 실행합니다.

B) 이것을 system.webServer 섹션 의 web.config에 추가 하면 .NET이 BundleModule을 통해 .js 및 .css 요청을 실행하게됩니다.

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

실제 원인을 찾아 내 블로그에서 나와 공유 한 Ray Moro에게 큰 소리로 외쳤다. http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html


두 번째 옵션과 함께 근본 원인에 대한 자세한 정보로 업데이트되었습니다.
cdeutsch

1
내 번들 이름이 "css"로 끝나는 폴더와 같은 이름이기 때문에이 문제가 발생했습니다. 내 번들에 파일 확장명이 정확히 없었지만 제안 A로 인해 문제가 발생했습니다.
dsnunez

1
이것은 정답이어야하며 동일한 문제를 해결하는 데 도움이됩니다.
psulek

큰 답변 그것은 나를 도와줍니다
DKR

web.config에서 누락 된 <module> 섹션이있는 것 oh man ...
XDS

19

AppHarbor에 ASP.NET MVC 앱을 배포하려고 할 때 나와 함께 일어났습니다.

이름이있는 스타일 시트 번들이있었습니다.

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

폴더 구조는

-내용

-내용 \ 부트 스트랩 \ ...

번들 이름을 "~/Content/bootstrap-css"내 문제로 변경하면 문제가 해결되었습니다.


15

나는이 질문에 4 년 늦었다는 것을 알고 있지만 이것은 나를 위해 일했다.

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

2
위와 아래의 모든 답변 중. 이것은 나를 위해 일한 유일한 것입니다.
Haim Katz

3
디버그 모드에있을 때 최적화 할 수 있습니다. 이것이 번들이 dev 시스템에서 작동하는지 확인하는 좋은 방법이지만 코드에이 문장을 남겨두면 안됩니다.
Rudey

9

403 오류가 해결되었습니다. 다음은 403 오류에 대한 자세한 설명 및 해결책입니다. CSS 번들에 대한
솔루션 이 시연되었습니다. 그러나 JavaScript에도 적용됩니다.

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

간단히 말해서, 가상 경로가 있는지 확인 [Script | Style]Bundle("~/content/[script | css]")파일 시스템 (예를 들어 폴더를 일치하지 않는 C:\approot\Content\[script | css]대신)[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")


2
고마워, 이것은 내가 경험 한 문제입니다. 이를 해결하기 위해 BundleConfig.cs에서 경로를 @ Styles.Render ( "~ / Content / css")에서 @ Styles.Render ( "~ / bundles / css")로 변경했습니다. 이제 디버그 모드에서 로컬로 실행할 때와 릴리스 또는 디버그 모드로 게시 될 때 작동합니다.
Ken Palmer

좋은 답변이지만 링크 만 남겨두면 안됩니다. 링크 된 웹 사이트가 다운 된 경우이 글의 기본 단계는 여기에있는 것이 좋습니다.
Vitor M. Barbosa

5

BundleConfig 클래스에서 아래 코드를 추가하여 문제를 해결했습니다.

BundleTable.EnableOptimizations = false;

3

내가하는 일은 매우 간단합니다

ScriptBundle의 끝에 "js"를 추가합니다 : new ScriptBundle ( "~ / bundles / appjs") 그리고 StyleBundle의 끝에 "css"를 추가합니다 : new StyleBundle ( "~ / content / appcss")

내 폴더 이름은 "js"또는 "css"로 끝나지 않습니다.

그렇게해야합니다.


2

이것은 'ScriptBundle 클래스'에도 적용되며 생성자의 '매개 변수 이름'이 웹 응용 프로그램 파일 시스템의 경로와 일치하지 않아야합니다. IIS는 파일 / 요청을 처리하려고 시도합니다.


1

암호화 된 파일에서 문제가 발생할 수도 있습니다. 이것은 BootStrap을 다운로드하고 제공된 파일을 사용할 때 발생했습니다. Windows 탐색기에서 녹색으로 표시되고 Visual Studio에서 제대로 작동했지만 배포하면 403 오류가 발생했습니다.

속성으로 이동 한 다음 고급 속성으로 이동하여 암호화 된 확인란이 있는지 확인할 수 있습니다.

선택을 해제하면 더 이상 문제가되지 않습니다.


0

(403 Forbidden) 오류와 동일한 문제가 있습니다. 내 경우에는 조직의 프록시 서버가 내 CSS 파일을 차단하기 때문입니다. CSS 파일 이름이 차단 규칙 중 하나와 일치합니다.


0

bootstrap.css 파일이 컨텐츠 폴더에 없다는 것을 알았으므로 패키지에서 파일을 찾아서 붙여 넣었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.