2012-10-06 1 views
1

사용자 지정 HTTP 처리기와 관련하여 나에게 명확하지 않은 부분이 있습니다.HTTP 처리기 및 사용자 지정 파일 확장명에 대한 404 오류

나는 다음과 같은 방법으로 내 web.config 파일에서 핸들러를 등록 this blog post에 따라 ScriptTranslator HTTP 처리기 만든

:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <handlers> 
     <add name="ScriptTranslatorHandler" path="*.js.axd" verb="*" type="CamelotShiftManagement.HttpHandlers.ScriptTranslator" /> 
    </handlers> 
</system.webServer> 

나는 또한 내를 Global.asax에 IgnoreRoute 명령을 추가 한을 그래서 web-app는 we.config 파일에 따라 핸들러를 작동시킬 수 있습니다.

routes.IgnoreRoute("{resource}.js.axd/{*pathInfo}"); 

핸들러 내 HTML 파일에서 JS 파일 참조를 번역, 그래서 내 스크립트 참조를 수정하고 끝에 axd 확장을 추가 할 생각입니다.

이 핸들러는 여기 번역 할 필요가있는 스크립트의 내용을 얻을 수있는 AXD의 확장자가없는 파일에 대한 요청 및 검색을받는 기본 ProccessRequest 작업입니다 : 내 HTML 파일 I에 따라서

public void ProcessRequest(HttpContext context) 
{ 
    string relativePath = context.Request.AppRelativeCurrentExecutionFilePath.Replace(".axd", string.Empty); 
    string absolutePath = context.Server.MapPath(relativePath); 
    string script = ReadFile(absolutePath); 

    string translated = TranslateScript(script,CultureInfo.CurrentCulture); 
    context.Response.Write(translated); 
    Compress(context); 
    SetHeadersAndCache(absolutePath, context); 
} 

스크립트 태그의 참조 만 수정하면 myscript.js.axd이라는 실제 파일이 없으므로 myscript.js이라는 파일이 있습니다.

404 오류가 발생합니다.

저는 맞춤형 HTTP 처리기를 만들고 사용하는 데 익숙하지 않아 사용법에서 기대할 수있는 것이 무엇인지 잘 모릅니다.

blog post은 코드에 실제 .js.axd 파일이 없어야하며 스크립트 참조 요청이 처리기로 경로 변경되고 코드의 처음 2 줄을 사용하여 실제 .js 파일을 처리 함을 의미합니다. 나는 그 전에 제공했다.

날씨가 좋지 않거나 사용자 정의 HTTP 처리기를 설정하지 않으면 먼저 처리기 코드를 실행 한 다음 404 오류 만 발생 시키거나 처리기 조치를 지원하는 더미 myScript.js.axd 파일을 만들어야합니까? 추가 그리고

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.IgnoreRoute("Scripts/{resource}.js.axd/{*pathInfo}"); 

:

<system.web> 
    <httpHandlers> 
     <add path="*.js.axd" verb="*" type="..." /> 
    </httpHandlers> 
    ... 
    </system.web> 

과 :

답변

2

는 URL이 같이 있어야 무시

<system.webServer> 
    ... 
    <handlers> 
     <add name="ScriptTranslatorHandler" path="*.js.axd" verb="*" type="..." /> 
    </handlers> 
    </system.webServer> 

또한, 네임 스페이스를 확인 포함하지 않는 ScriptTranslator.cs 파일이

추가 : routes.IgnoreRoute("{resource}.axd/{*pathInfo}");localhost/test.axd을 무시

기본이 아닌 '로컬 호스트/홈/test.axd`, 다음 응용 프로그램이 일치하는 경로를 찾기 위해 노력하고 그것을 찾을 수 없습니다, 우리는 (404)

+0

정확히습니까받을 당신이 쓴 것처럼 .. 내가 바꿀 필요가있는 유일한 것은'IgnoreRoute'에 전달 된 값입니다. {resource} 전에 "Scripts /"를 추가했으나 여전히 작동하지 않았습니다. 'ScriptTranslator.cs'의 네임 스페이스는 무엇을 의미합니까? 현재는'CamelotShiftManagement.HttpHandlers'입니다 – Mortalus

+0

괜찮습니다! 나는 스스로 그것을 발견했다. 스크립트 자체는/Scripts의 하위 폴더에있다.그래서/Scripts/Administration/presto .. 값을 변경했습니다. 이제 작동합니다 .. 이제 한 가지 더 .. 어떻게 스크립트 아래의 모든 하위 폴더에 대한 무시 규칙을 만들 수 있습니까? – Mortalus

+1

@Mortalus'routes.IgnoreRoute ("Scripts/{folder}/{resource} .js.axd/{* pathInfo}");' – webdeveloper