Development2010. 6. 9. 14:37


바쁘다고 정리를 안하고 넘어가다 보니 자꾸 잊어버려서, 두서는 좀 없더라도 가끔 이것저것 다시 등록해볼까 합니다.
그 첫번째로 .NET Framework 4.0의 기능 중 하나인 URL Routing을 Windows 2008 R2에 세팅하면서 겪은 문제해결 방법을 포스팅합니다.



1. 개요

  - .NET Framework 4.0 에서 제공되는 Routing기능을 이용하기로 함

  - 응용 프로그램 속성에서 ASP.NET 4.0환경으로 설정하고 빌드해야 함

  - 본 기능은 ASP.NET MVC2에 포함된 기능을 가볍게 이용할 때 유용할 것으로 보임

 

2. 웹프로그램 설정

  2.1 Global.asax 가 없다면 추가함

  2.2 Application_Start 메소드에 라우팅 함수호출 추가

 

        protected void Application_Start(object sender, EventArgs e)

        {

            // 여기에 라우팅 작성 하거나

            RouteTable.Routes.MapPageRoute("이름", "{패턴}", "~/{패턴}.aspx");

 

            // 별도 함수로 작성하거나

                RegisterRoutes(RouteTable.Routes);

 

        }

 

             void RegisterRoutes(RouteCollection routes)

        {

                routes.MapPageRoute("Search", "search/{service}", "~/{service}.aspx", false, new RouteValueDictionary { { "service", "test" } });

            /*

            routes.MapPageRoute("", "SalesReport/{locale}/{year}/{*queryvalues}", "~/sales.aspx");

            routes.MapPageRoute("SalesSummaryRoute", "SalesReportSummary/{locale}", "~/sales.aspx");

            routes.MapPageRoute("SalesDetailRoute", "SalesReportDetail/{locale}/{year}/{*queryvalues}", "~/sales.aspx", false);

            routes.MapPageRoute("SalesCurrentYearRoute", "SalesReportCurrent/{locale}/{year}/{*queryvalues}", "~/sales.aspx", false, new RouteValueDictionary { { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } });

            routes.MapPageRoute("ExpenseCurrentYearRoute","ExpenseReportCurrent/{locale}", "~/expenses.aspx", false,

                new RouteValueDictionary { { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } },

                new RouteValueDictionary { { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } });

 

            routes.MapPageRoute("ExpenseDetailRoute", "ExpenseReportDetail/{locale}/{year}/{*queryvalues}", "~/expenses.aspx", false,

                new RouteValueDictionary { { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } },

                new RouteValueDictionary { { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } },

                new RouteValueDictionary { { "account", "1234" }, { "subaccount", "5678" } });

            */

           

        }

 

3. 서버 설정

  3.1 Windows 2008 R2 .NET Framework 4.0은 별도 설치해야 함

    다운로드 : http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992

 
  
3.2 .NET Framework 4.0
설치만으로 UrlRouting이 잘 된다면 별도의 과정이 필요 없지만, 문제가 있다면 아래와 같이 추가적인 등록 후 실행이 가능

 

   3.3 IIS 7.5를 실행해서 서버 홈 화면이나 웹사이트의 IIS항목 중 [처리기 매핑]으로 이동한 뒤, 오른쪽 상단의 [작업] [관리되는 처리기 추가..]를 실행해 아래와 같이 등록

 

   

 

        형식 : System.Web.Routing.UrlRoutingModule

 

       위의 방식은 Visual Studio에서 게시를 할 때마다, [처리기 매핑]의 항목이 초기화 되는 문제가 있어서, 아래와 같이 web.config에 등록과 관련한 코드를 추가하도록 함

 

<system.webServer>

      <handlers>

        <add name="UrlRouting" path="*" verb="GET,POST" type="System.Web.Routing" preCondition="integratedMode" />

      </handlers>

</system.webServer>

 

 

    3.4 다음으로 웹사이트의 응용 프로그램 풀의 설정을 체크해야 함

      : 사용하는 풀의 .NET Framework 버전과 ID 항목이 아래와 같이 되어 있는지 확인 필요   

 

    

 

4. 테스트

  4.1 Global.asax 2번째 인자를 "test/{service}", 3번째 인자를 "~/{service}.aspx" 설정했고, 웹사이트 루트에 abc.aspx 있다면, 브라우져에서 http://localhost/test/abc 라고 호출 , abc.aspx 내용이 확인될 것임

 

5. 비고

  5.1 아래의 URL 참조하면 실제 파일명을 직접 호출하지 못하도록 제한도 가능

      http://jack-fx.com/csharp/routetable-routes-mappageroute-tag/

Posted by Blue*