2011-05-02 5 views
2

내 ASP.Net 프로젝트를보다 잘 구성하기 위해 모든 .aspx 파일을 WebPages라는 폴더에 저장했습니다.경로의 실제 폴더를 마스크 아웃하는 Asp.net 라우팅

내 모든 URL에서 'WebPages'폴더를 가려내는 방법을 찾고 싶습니다. 그래서 예를 들어, 나는 다음과 같은 URL을 사용하지 않으 :

http://localhost:7896/WebPages/index.aspx 
http://localhost:7896/WebPages/Admin/security.aspx 

을하지만 그 대신, 다음과 같이 내 모든 URL이되고 싶습니다 ('웹 페이지는'나는 내 작품을 구조화에 사용하는 물리적 인 폴더입니다 만,) 외부 세계에서 볼 수 없었던 :

http://localhost:7896/index.aspx 
http://localhost:7896/admin/security.aspx 

나는 내 프로젝트에있는 '모든 페이지'라우팅 항목을 specifiying으로 내 자신의 해결책을 마련 할 수 있었다 (및 작동) 하지만 앞으로는 유지 보수가 안되기 때문에 다른 방법이 필요합니다.

public class Global : HttpApplication 
{ 
    protected void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapPageRoute("", "index.aspx", "~/WebPages/index.aspx"); 
     routes.MapPageRoute("", "admin/security.aspx", "~/WebPages/Admin/security.aspx"); 
    } 
} 

아마도 내가 한 것은 모든 요청을 잡아 내고 단순히 '웹 페이지'실제 디렉터리를 추가하는 클래스일까요?

+0

많은 컨트롤과 C# 파일이 포함 된 상당히 큰 프로젝트를 진행하고 있으며 파일을 구성하기 위해 전화를 걸었습니다. 그것은 내가 이해하는 표준은 아니지만 그것은 우리에게 효과가있는 것입니다. – Hady

+0

물론 선택의 여지가 있습니다. 그러나 나는 아직도 당신이 궤도에서 벗어난 것을 아주 강하게 느낀다. 하위 디렉터리에 컨트롤과 C# 파일을 저장합니다. Visual Studio로 만들면 자동으로이 작업을 수행 할 것인지 묻는 메시지가 나타납니다. 루트 디렉토리는 핵심 웹 페이지 용입니다. –

+0

Jonathon에게 제안 해 주셔서 감사합니다. 이 작업을 수행하지 않으면 핵심 웹 페이지의 위치로 루트 디렉토리를 사용하는 것으로 되돌릴 수 있습니다. - 실제로 상황이 복잡해질지라도 – Hady

답변

0

나는 결국 내 상황에 잘 작동합니다 다음과 같은 솔루션을 나서서 :에서

내 Global.asax 파일에는 다음 코드가 있습니다.

public class Global : HttpApplication 
{ 
    protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     if (Request.Path.EndsWith(".aspx")) 
     { 
      FixUrlsForPages(Context, Request.RawUrl); 
     } 
    } 

    private void FixUrlsForPages(HttpContext context, string url) 
    { 
     context.RewritePath("/WebPages" + url); 
    } 
} 

It 튜더 (Tudor)가 제안한 바를 꽤 많이하고 있지만 web.config (코드가 작동하지 않음) 대신 코드에 나와 있습니다.

0

사용 http://www.iis.net/download/urlrewrite이 대신

당신은 당신의 Web.config이있을 것

:

<rewrite> 
    <rules> 
    <rule name="Rewrite to Webpages folder"> 
     <match url="(.*)" /> 
     <action type="Rewrite" url="/WebPages/{R:1}" /> 
    </rule> 
    </rules> 
</rewrite> 
+0

'rewrite'요소가 'system.webServer' '요소를 web.config 파일에 저장 하시겠습니까? 나는 내 프로젝트에서 그렇게했는데 (vs2010 intellisense가 구조를 잘못 보여도) 그러나 그것은 나에게 도움이되지 못했다. – Hady