2014-12-22 3 views
0

내 mvc 4 프로젝트의 루트에 일반 핸들러 (KeepSessionAlive.ashx)를 추가했습니다. 핸들러의 코드는 다음과 같습니다mvc 프로젝트에서 일반 핸들러가 실행되지 않습니다.

내 응용 프로그램을 실행하고 디버깅하는 동안 검사 할 때마다
public class KeepSessionAlive : IHttpHandler, IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Session["KeepSessionAlive"] = DateTime.Now; 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

, 나는 Session["KeepSessionAlive"]이 설정되는 표시되지 않습니다. 핸들러의 ProcessRequest 메서드에서 중단 점을 추가하려고 시도했지만 중단 점이 결코 사이트를 서핑하는 중 적중하지 않습니다. 응용 프로그램에서 처리기를 가져 오려면 다른 작업을 수행해야합니까?

우리는 webforms 프로젝트에서와 같은 작업을 수행 했으므로 거기에서 다른 작업을 수행해야한다는 것을 기억하지 않습니다.

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.IgnoreRoute("{resource}.ashx/{*pathInfo}"); 
     //other routes skipped 
    } 

내가 문제였다 경우에 거기에 .ashx을 추가했지만 핸들러가하지 않는 것 또는 그 선이없는 하나의 방법은 호출 얻을 : 나는 또한 포함 내 경로를 업데이트했습니다.

+1

MVC 작업으로 대체해야합니다. – SLaks

+0

@SLaks 설명해 주시겠습니까? 이 작업은 모든 페이지, 모든 컨트롤러에서 실행해야합니다. 나는 핸들러가 갈 길이라고 생각했다. – Paritosh

+0

당신은 완전히 HttpHandlers를 오해하고 있습니다. ActionFilter로 대체해야합니다. – SLaks

답변

2

ControllerOnActionExecuted 메서드를 재정의 할 수 있습니다.

public class BaseController : Controller 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.HttpContext.Session["KeepSessionAlive"] = DateTime.Now; 
    } 
} 

이렇게하면 컨트롤러가 BaseController에서 파생됩니다. 이것은 'MVC 방식'입니다. 당신 핸들러가되지 않을 수도 있습니다 :

public class KeepSessionAliveAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.HttpContext.Session["KeepSessionAlive"] = DateTime.Now; 
    } 
} 

당신은 그것을

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new KeepSessionAliveAttribute()); 
    } 
} 

PS 등록을 기억해야합니다 SLaks에서 언급 한 바와 같이

또 다른 방법은, 사용자 정의 ActionFilter를 작성하고 전 세계적으로 적용하는 것입니다 web.config

관련 문제