2012-01-09 3 views
2

우리는 ASP.NET MVC3 응용 프로그램에 스키닝 기능을 제공해야합니다..NET MVC3 : CSS 파일 누락을 방지하려면 404? 또는 HTML을 작성하기 전에 파일이 존재하는지 확인하십시오.

내 접근 방식은 지금까지 CSS 파일에 대한 쿠키와 아이의 행동과이 문제를 해결하기 위해왔다

: www.ourapp.com/as/www.clientapp 같은 URL을 사용하여 우리의 응용 프로그램에

  1. 클라이언트 링크 .com/then-go-to/path/in/ourapp.
  2. 위 URL은 값이 "www.clientapp.com"인 "skin"이라는 쿠키를 작성한 후/path/in/ourapp로 리디렉션되는 작업 메소드로 라우팅됩니다.
  3. 우리의 레이아웃 (masterpage)는 CSS 파일을 렌더링 할 수있는 <head> 섹션에 @Html.Action있다.
  4. 하위 작업은 쿠키를 검사하고 렌더링 할 <link> 태그를 부분보기에 알리는 뷰 모델을 만듭니다.

CSS 파일 구조는 쿠키 값에 기초한다. 그래서 우리의 CSS 내용은 다음과 같이 보일 수 있습니다 :

/content 
    /www.clientapp.com 
     /style1.css 
     /style1.css 
    /www.client2app.com 
     /style1.css 
     /style2.css 

레이아웃에 스킨을 적용 할 때 위의 패턴/대안을 듣는 것이 더 좋습니다. 그러나 이것이 내 질문의 이유는 아닙니다.

현재 파일 시스템에 css 파일이없는 경우이 방법에 문제가 있습니다. 요청으로 인해 IIS가 404를 반환합니다. 404 페이지를 사용자 정의 페이지로 대체합니다 (<head>에 @ Html.Action이있는 것과 동일한 레이아웃을 사용하지 않음). 이로 인해 IIS는 필요하지 않은 추가 처리를 수행합니다 (예 : 404 페이지 레이아웃에서 로그인/로그 아웃 링크, 수평 탐색 등을 수행하는 하위 작업 & 하위 작업).

내가 볼때이 문제를 해결하는 두 가지 방법이 있습니다 :

는 CSS를 구성하는 자식 작용에
  1. , 파일들이 렌더링되어야 뷰 모델을 이야기하기 전에 디스크에 존재 확인하기 위해 검사가 . 이 접근법을 사용하는 Pro는 상당히 쉬워야합니다. 단점은 단위 테스트에서 주입 할 수있는 서비스에서 파일 I/O를 래핑해야한다는 것입니다. 또한이 응용 프로그램은 Azure에 배포됩니다. 필자는 Azure가 필요한 파일 시스템을 읽을 수는 있지만 쓰기는 불가능하다고 생각한다.
  2. 어떻게해서든지 css 파일에 대해 404가 반환되지 않습니다. 이를 위해 global.asax Application_Error에 로직을 구현해야합니까? 또는 CSS 파일 누락으로 인해 404 응답이 발생하지 않도록 다른 방법이 있습니까?

올바른 접근 방법은 무엇입니까? 아니면 내가 고려하지 않은 다른 것이 있습니까?

업데이트

우리는과 같이 사용자 지정 404 오류 페이지에서이 문제를 해결 결국 :

[ActionName("not-found")] 
public virtual ActionResult NotFound() 
{ 
    // do not return 404 for missing css files 
    if (Request.RawUrl.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) 
    { 
     Response.StatusCode = 404; 
     return new EmptyResult(); 
    } 
    return View(); 
} 
+0

@cdeszaq 덕분에 나는 그런 생각을하지 못했습니다. 따라서 404 오버라이드에서는 Request.RawUrl을 검사하여 CSS 파일 인 경우 EmptyResult를 반환 할 수 있습니다. 너가 말하는게 이거니? – danludwig

+0

@cdeszaq 다시 한 번 감사드립니다. 내가 표시 할 수 있도록 답변으로 게시하십시오. – danludwig

답변

1

하나의 옵션이 하지 재정에 CSS의 요청에 대해 404 오류 일 것이다.

CSS 파일이 누락 된 경우 404 상태를 반환하지만 본문은 비워 둡니다.인간은 CSS 파일을 볼 수 없으므로 본문은 CSS 파일과 관련이 없으며 모든 브라우저가 관심을 갖고 있기 때문에 본문은 문제가되지 않습니다.

관련 문제