2011-09-28 4 views
0

그래서 MVC 경로를 만드는 global.asax에 다음과 같은 내용이 있습니다. 아래에 나오는 순서대로 호출됩니다. 나는 (다른보기에서 실행시에 생성되는)/branding.css이미 무시 된 경로와 일치하는 경로를 만들 수 있습니까?

_routeCollection.IgnoreRoute("css/{*pathInfo}"); 

_routeCollection.MapRoute("BrandingCSS", "css/branding.css", new { controller = "Branding", action = "Css" }); 

가능이되지 않습니다는 CSS 폴더의 경로를 무시하는 것 한 일을 가지고,하지만 CSS로 경로를 생성 할 것으로 예상 무엇입니까? css/branding.css에 요청을하면 파일이 존재하지 않는다는 404 오류가 발생합니다. 이 작업을 할 수있는 방법이 있습니까, 나는이 파일이 어디서나 있지만 css 폴더에서 오는 원본을 보는 사람에게 투명하게 될 것이라고.

답변

1

IgnoreRoute에 RouteConstraint을 설정하면 맞춤 CSS 파일을 만들고 제공 할 수 있습니다. 그런 다음

public class NotBrandingCss : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     return values[parameterName].ToString().ToLowerInvariant() != "branding.css"; 
    } 
} 

다음에 IgnoreRoute을 변경 : 다음과 같은 제약 조건을 만들기 지금

_routeCollection.IgnoreRoute("css/{*pathInfo}", new { pathInfo = new NotBrandingCss() }); 

, 당신의 IgnoreRoute를 실패, 등 당신의 BrandingCSS 경로,

로 이동합니다 /css/branding.css에 요청
+0

흥미 롭습니다, 감사합니다! 이것은 작동하지만 믿거 나 말거나, 경로를 추가하고 경로를 무시하는 순서를 변경하면 잘 작동합니다. 나는 여전히 당신의 대답을 대답으로 표시 할 것입니다. –

+0

매우 흥미 롭습니다. 나는'IgnoreRoutes'가'MapRoutes' 이전에 처리되었다고 가정했으나, 테스트에서 Routes 테이블이 항목이 추가되는 엄격한 순서로 검사되었다고 보입니다. MVC3 소스에 깊이 잠수 할 시간. – counsellorben

+0

예, 오늘 다시 테스트 한 후 작동하지 않았습니다. 내 CSS 파일의 다른 테스트를 놓친해야합니다 그리고 그것은 작동하지 않았다. –

관련 문제