2015-01-05 2 views
0

나는 내 응용 프로그램의 루트에 다음과 같은 핸들러 (.ASHX) 파일이 있습니다MVC, 점점 500 오류

  routes.IgnoreRoute("KeepSessionAlive.ashx"); 
: 내 RouteConfig.cs에 아래 추가 한

public class KeepSessionAlive : IHttpHandler, IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Session["KeepSessionAlive"] = DateTime.Now; 
    } 

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

나는 또한 나의 Web.config의에 아래 추가 한 : system.web에서 -> httphandlers :

<add verb="*" path="/KeepSessionAlive.ashx" type="MyWeb.KeepSessionAlive" validate="false" /> 

이하 의 system.webServer -> 핸들러

<add name="KeepSessionAlive" path="/*.ashx" verb="*" type="MyWeb.KeepSessionAlive" /> 

내가으로 실행 계속 문제는 사이트가 페이지가 아니라 루트보다,에 동일한 폴더에 처리기를 찾고 유지합니다. 예를 들어 내가 홈페이지를 방문하면 Fiddler에서 다음과 같이 표시됩니다.

GET /MySite/KeepSessionAlive.ashx?c=678962070347 HTTP/1.1 

012를 반환하며 200을 반환합니다. System.ArgumentException을 :

GET /EAOTracking/Payment/EditAM/KeepSessionAlive.ashx?c=776502292135 HTTP/1.1 

이 다음 내용의 500 오류를 반환 : 내가 피들러에서 그 편집 페이지를 떠날 때/내 사이트가/결제/편집처럼이 볼, 하위 폴더 페이지로 이동하지만 경우 : 매개 변수 사전에 'MyWeb.Controllers.PaymentController'의 'System.Web.Mvc.ActionResult Edit (Int32)'메서드에 대해 nullable이 아닌 'System.Int32'형식의 매개 변수 'id'에 대한 null 항목이 있습니다. 선택적 매개 변수는 참조 유형, 널 입력 가능 유형 또는 선택적 매개 변수로 선언되어야합니다. 매개 변수 이름 : 매개 변수

내 편집 작업 정의는 다음과 같습니다 핸들러가 항상 루트 폴더에없는 이유가 작동하기 때문에 나는 확실하지 않다

public ActionResult Edit(int id) 

의 루트 폴더에 나는 경우 사이트. 당신이 aboslute URL에서 페이지를 호출해야하는 경우

+1

핸들러를 사용하는 것은'mvc-way'가 아닙니다. 그런 기능을 위해 전역 필터를 사용해야합니다. –

+0

브라우저에서 ashx 핸들러로의 요청을 일으키는 이유는 무엇입니까? 어떻게 든 당신의 견해에서 핸들러를 참조합니까? –

+0

@WiktorZychla 뷰에 아무 것도 추가하지 않았다. 핸들러가 호출 될 때 호출된다. 호출 된 모든 요청이다. – Paritosh

답변

1

이 - 페이지에 상대 URL ("KeepSessionAlive.ashx")를 사용

"/KeepSessionAlive.ashx" 

같은 절대 URL을 사용합니다 (난 당신이 핸들러를 핑 (ping) 자바 스크립트를 사용하는 가정) 페이지의 기본 URL과 결합하십시오.

+0

.js 파일에서이 파일에 대한 참조가 있었지만 루트에서 픽업하도록 조정해야했습니다. – Paritosh