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

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-금지됨 : 액세스가 거부됩니다.

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



답변

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

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

의견에서 :

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


답변

이 문제는 기본적으로 .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


답변

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

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

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

폴더 구조는

-내용

-내용 \ 부트 스트랩 \ …

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


답변

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

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

   BundleTable.EnableOptimizations = true;     // Added this           
}


답변

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]")


답변

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

BundleTable.EnableOptimizations = false;


답변

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

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

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

그렇게해야합니다.