2010-12-21 1 views
2

데이터베이스에서 asp.net 웹 사이트 (비 MVC)에 등록되는 경로가 있습니다. 경로는 I가 로그인하고 그들이 모든 일을 잘 등록 내가 뭘하려고 몇 가지 경로 데이터를 기반으로 방문 페이지 만드는 것입니다 :./권한을 사용하여 .NET WebForm Routing 작업을 수행하는 방법

페이지 [사이트]입니다/착륙을

경로 델

"landing/{client}"처럼 보이고 내 페이지 Login.aspx로 라우트됩니다. 경로에서 클라이언트를 가져온 다음 값에 따라 사용자 정의 브랜드 데이터를 표시합니다. 사용자가 인증 쿠키가없는 경우 내 인증 모드 내 loginUrl = "Login.aspx"

로, 형태로 설정 내 Web.config의에서

, 내가 한 그것은에 사용자를 리디렉션 :

경로 URL을 유지하고 올바른 데이터를 표시하는 대신 [site] /Login.aspx?ReturnUrl=%2flanding%2fdell IIS 서버는 실제로 경로를 전혀 처리하지 않고 사용자를 Login.aspx 페이지로 보냅니다.

내 web.config에 대한 추가 사항을 여러 번 시도했습니다. <location path="landing"><system.web><authorization><allow users="*"/></auth></sys.web></loc> 등 많은 변형이 있지만 아무 것도 작동하지 않습니다.

아이디어 누구? 나는 이것이 일반적인 문제라고 가정하고, 잘 문서화되지 않았습니다.

+0

해결 방법 현재로서는 Request.QueryString [ "ReturlUrl"] 값을 평가하고 일부 작업을 수행하지만 이는 좋지 않습니다. 그러나 솔루션을 찾을 때까지 작업을 완료 할 수 있습니다. 아직 아이디어가 열려 있습니다 ... – jakmas

답변

1

좋아, 마침내 알아 냈어. 저는 이것을 언젠가 다른 누군가에게 도움이되기를 희망하면서 이것을 간단한 형태로 설명하려고 노력할 것입니다.

기억해야 할 몇 가지 사항은 먼저 MVC가 아닌 앱인 순수 웹 폼입니다. 이제, Web.config의에서, 항목이 추가 될 필요가

void RegisterRoutes(RouteCollection routes) 
    { 
     routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler())); 
     routes.Add(new Route("{service}.asmx/{*pathInfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.psd/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.js/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.jpg/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("*.gif/{*pathinfo}", new StopRoutingHandler())); 
     routes.Add(new Route("{resource}.css/{*pathinfo}", new StopRoutingHandler())); 

     routes.RouteExistingFiles = false; 

     Data.DataContext context = new Data.DataContext(); 

     var AppRoutes = (from r in context.SomeRouteTable 
         select r).ToList(); 

     foreach (var AppRoute in AppRoutes) 
     { 
      routes.MapPageRoute(AppRoute.RouteName, 
           AppRoute.RouteUrl, 
           AppRoute.PhysicalFile, false); 
      // The important part is the "false" above. It is the 
      // CheckPhysicalUrlAccess parameter. 
     } 
    } 

:의 내부 위해 Application_Start 무효에

<location path="landing"><system.web><authorization><allow users="*"/></authorization></system.web></location> 

내 Global.ascx에서

는 방법이있다 Global.asax 파일은 단순히 RegisterRoutes 함수를 호출합니다.

this.RegisterRoutes(RouteTable.Routes); 

서버를 다시 시작하고 완료합니다. 이제 로그인 페이지의 경로가 작동하지만 다른 모든 경로는 안전합니다. 다른 경로를 노출해야하는 경우 allow system = "*"으로 system.web 인증 섹션에 경로의 기본 경로를 추가하면됩니다.

다른 점은 자바 스크립트 (js), 이미지 (psd, jpg, gif), 실제로 경로 처리기의 정적 파일을 모두 가져갈 수 있다는 것입니다. 웹 전체에서 .axd와 .asmx가 설명되었지만 웹폼 모델에서 라우팅을 처리 할 때 다른 정적 파일 유형에 대해이 작업을 무시하는 방법을 찾지 못했습니다.

다른 사람들에게 도움이되기를 바랍니다. 그리고이 모든 것을 추적하고 자신을 테스트하는 모든 시간을 보냈던 시간을 절약 할 수 있기를 바랍니다.

여러분을 즐기십시오.

+0

Data.DataContext의 네임 스페이스 란 무엇입니까? –

관련 문제