나는 내 응용 프로그램의 루트에 다음과 같은 핸들러 (.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에서 페이지를 호출해야하는 경우
핸들러를 사용하는 것은'mvc-way'가 아닙니다. 그런 기능을 위해 전역 필터를 사용해야합니다. –
브라우저에서 ashx 핸들러로의 요청을 일으키는 이유는 무엇입니까? 어떻게 든 당신의 견해에서 핸들러를 참조합니까? –
@WiktorZychla 뷰에 아무 것도 추가하지 않았다. 핸들러가 호출 될 때 호출된다. 호출 된 모든 요청이다. – Paritosh