의 C # WebApi 방법 액세스 세션 컨트롤러

MVC 후, 세션 모드는 일반적이지되었을 수도 있지만 여전히 페이지 확인 코드 등으로 가끔 사용된다. 뷰 컨트롤러가 사용하는 예 로그인 페이지 코드 달성 들어, 세션의 값을 저장하는데 사용될 수있다. WebApi 요청을 처리 할 수 ​​있습니다에하지만 지금은 일반적으로 사용되는, MVC4 응용 프로그램이 기본 모드에 따라 건립, WebApi는 우리는 특정 구성이 필요 세션의 값이 컨트롤러가 보유보다 작 걸릴 것입니다. 다음과 같이 기록 :

첫 번째 단계는 : 단순히 라우팅 WebApi의 수정을 준비하기 위해 두 개의 클래스를 생성

첫 번째 클래스 HttpControllerHandler로부터 상속 SessionRouteHandler, 거기에는 내부 방법입니다, 따라서 무엇을 작성할 필요가 없습니다 실제로 무엇을 IRequiresSessionState 인터페이스 IRequiresSessionState 동시에 실현에.

1  공용  클래스 SessionRouteHandler : HttpControllerHandler , IRequiresSessionState
 2-  {
 3          공개 SessionRouteHandler ( 으로 RouteData 으로 RouteData) 베이스 (으로 RouteData)
 -4-          { 
5          }
 6 }

HttpControllerRouteHandler로부터 상속 번째 클래스 SessionControllerRouteHandler,

코드를 복사
1  공용  클래스 SessionControllerRouteHandler : HttpControllerRouteHandler
 2  {
 3          보호  재정 을 IHttpHandler GetHttpHandler ( RequestContext requestContext)
 4          {
 5              반환  새로운 SessionRouteHandler (requestContext.RouteData);
6          }
 7 }
코드를 복사

이 두 클래스 종료 후 다음 단계에 대한 것입니다.

단계 : App_Start 디렉토리가 우리 때문에하는 것입니다에서 수정 WebApiConfig는 초보자 알림에이 클래스는, 정상적인 상황에서 진행 여기 ...... 글로벌, WebApiConfig.Register (에서 볼 수 있습니다. WebApi GET 세션 MVC 컨트롤러 세트에이 구성에서 다시보기로 변경.

코드를 복사
1 개  공용  정적  클래스 WebApiConfig
 2-  {
 3      공공  정적  무효 레지스터 (HttpConfiguration 구성)
 -4-      {
 5              // config.Routes.MapHttpRoute (
 6              //     "DefaultApi"이름
 7              //     routeTemplate "API / 제어기 {} / {이드 } ",
 8              //     기본값 : 새로운 {ID = RouteParameter.Optional}
 9              // );
10              // 경로上传递세션 
11              RouteTable.Routes.MapHttpRoute (
 12                  이름 : "DefaultApi " ,
 13                  routeTemplate : " API / 제어기 {} / {ID} " ,
 14                  기본값 : 새로운 {식 RouteParameter.Optional}) = RouteHandler. 새로운 SessionControllerRouteHandler ();
 15      }
 16 }
코드를 복사

다음은 RouteTable에서 직접 구성 및 빌드로 우리에게 SessionControllerRouteHandler RouteHandler 첫 번째 단계를 지정합니다. 여기에 우리가 어떤 동작을 지정해야하기 때문에 그러나 이러한 노력은 세션 전송 것 여전히 실패, 완료했다.

세 번째 단계 : 수정 글로벌.

Global.asax.cs 코드 재정에서의 초기화 방법은 다음 코드를 추가합니다 :

1  공용  대체  공극 초기화 ()
 2  {
 3       PostAuthenticateRequest + = (S, E) => HttpContext.Current.SetSessionStateBehavior (SessionStateBehavior.Required);
4       베이스 .Init ();
5 }

모두의 완성이 시간을 컴파일 될 수 있으며, 이후 글쎄, 당신은 예를 들어, 일반적인 방법으로 세션 컨트롤러를 만들 수 있습니다 :

세션 [ " ValidCode " = " 세션 테스트 "

당신은 WebApi에서 얻을 수 있습니다 :

HttpContext.Current.Session [ " ValidCode " ]로 .toString ()

MVC 후, 세션 모드는 일반적이지되었을 수도 있지만 여전히 페이지 확인 코드 등으로 가끔 사용된다. 뷰 컨트롤러가 사용하는 예 로그인 페이지 코드 달성 들어, 세션의 값을 저장하는데 사용될 수있다. WebApi 요청을 처리 할 수 ​​있습니다에하지만 지금은 일반적으로 사용되는, MVC4 응용 프로그램이 기본 모드에 따라 건립, WebApi는 우리는 특정 구성이 필요 세션의 값이 컨트롤러가 보유보다 작 걸릴 것입니다. 다음과 같이 기록 :

첫 번째 단계는 : 단순히 라우팅 WebApi의 수정을 준비하기 위해 두 개의 클래스를 생성

첫 번째 클래스 HttpControllerHandler로부터 상속 SessionRouteHandler, 거기에는 내부 방법입니다, 따라서 무엇을 작성할 필요가 없습니다 실제로 무엇을 IRequiresSessionState 인터페이스 IRequiresSessionState 동시에 실현에.

1  공용  클래스 SessionRouteHandler : HttpControllerHandler , IRequiresSessionState
 2-  {
 3          공개 SessionRouteHandler ( 으로 RouteData 으로 RouteData) 베이스 (으로 RouteData)
 -4-          { 
5          }
 6 }

HttpControllerRouteHandler로부터 상속 번째 클래스 SessionControllerRouteHandler,

코드를 복사
1  공용  클래스 SessionControllerRouteHandler : HttpControllerRouteHandler
 2  {
 3          보호  재정 을 IHttpHandler GetHttpHandler ( RequestContext requestContext)
 4          {
 5              반환  새로운 SessionRouteHandler (requestContext.RouteData);
6          }
 7 }
코드를 복사

이 두 클래스 종료 후 다음 단계에 대한 것입니다.

단계 : App_Start 디렉토리가 우리 때문에하는 것입니다에서 수정 WebApiConfig는 초보자 알림에이 클래스는, 정상적인 상황에서 진행 여기 ...... 글로벌, WebApiConfig.Register (에서 볼 수 있습니다. WebApi GET 세션 MVC 컨트롤러 세트에이 구성에서 다시보기로 변경.

코드를 복사
1 개  공용  정적  클래스 WebApiConfig
 2-  {
 3      공공  정적  무효 레지스터 (HttpConfiguration 구성)
 -4-      {
 5              // config.Routes.MapHttpRoute (
 6              //     "DefaultApi"이름
 7              //     routeTemplate "API / 제어기 {} / {이드 } ",
 8              //     기본값 : 새로운 {ID = RouteParameter.Optional}
 9              // );
10              // 경로上传递세션 
11              RouteTable.Routes.MapHttpRoute (
 12                  이름 : "DefaultApi " ,
 13                  routeTemplate : " API / 제어기 {} / {ID} " ,
 14                  기본값 : 새로운 {식 RouteParameter.Optional}) = RouteHandler. 새로운 SessionControllerRouteHandler ();
 15      }
 16 }
코드를 복사

다음은 RouteTable에서 직접 구성 및 빌드로 우리에게 SessionControllerRouteHandler RouteHandler 첫 번째 단계를 지정합니다. 여기에 우리가 어떤 동작을 지정해야하기 때문에 그러나 이러한 노력은 세션 전송 것 여전히 실패, 완료했다.

세 번째 단계 : 수정 글로벌.

Global.asax.cs 코드 재정에서의 초기화 방법은 다음 코드를 추가합니다 :

1  공용  대체  공극 초기화 ()
 2  {
 3       PostAuthenticateRequest + = (S, E) => HttpContext.Current.SetSessionStateBehavior (SessionStateBehavior.Required);
4       베이스 .Init ();
5 }

모두의 완성이 시간을 컴파일 될 수 있으며, 이후 글쎄, 당신은 예를 들어, 일반적인 방법으로 세션 컨트롤러를 만들 수 있습니다 :

세션 [ " ValidCode " = " 세션 테스트 "

당신은 WebApi에서 얻을 수 있습니다 :

HttpContext.Current.Session [ " ValidCode " ]로 .toString ()

추천

출처www.cnblogs.com/guo-xu/p/12133945.html