2012-05-15 2 views
3

나는 다음과 같은 사용자 지정 작업 필터를 구현해야 ASP.NET MVC에서 사용자 정의 액션 필터를 통해 사용자 정의보기로 리디렉션 :

액션 필터를 작업 CountRows에 적용될 때, 그것은 OnActionExecuting 투수의에 조치를 "기억"해야 이전에 호출되고 클라이언트 브라우저를 Login 조치로 재 지정합니다. 그러나 로그인 동작은 호출 된 원래 동작을 어떻게 든 알 수 있으므로 로그인이 완료되면 즉시 다시 CountRows으로 리디렉션됩니다.

원래 동작 이름을 filterContextTempData에 저장할 수 있지만 일반적으로 시나리오를 구현하는 방법은 무엇입니까?

답변

0

임시 데이터가 필요하지 않습니다. 이상적으로는 SignIn GET 작업은 returnUrl 문자열을 사용해야합니다. 그런 다음 필터를 사용하고 filterContext.HttpContext.Request.RawUrl을 로그인에 전달할 수 있습니다. 로그인 양식의 숨겨진 필드에 리디렉션 URL을 쓰십시오. 그런 다음 게시 할 때 인증을 수행하고 리디렉션 (model.ReturnUrl)을 반환합니다.

[Authorize] 특성으로 보호 된 동작을 꾸미면 MVC는 기본적으로이 동작을 실제로합니다. 기술적으로 그것은 Request.Url.Path가 아니라 RawUrl을 전달하지만 개념과 결과는 같습니다.

4

당신은 단순히 다음과 같은 코드를 사용하여이 작업을 수행 할 수 있습니다

[AttributeUsage(AttributeTargets.All)] 
public class MyActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //write your logic 

     RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
     redirectTargetDictionary.Add("area", ""); 
     redirectTargetDictionary.Add("action", "Error"); 
     redirectTargetDictionary.Add("controller", "Home"); 
     filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 
    } 
} 

MyActionFilter는 "~/홈/오류"을 연결 리디렉션합니다.

이 예는 복사 (약간 대답 목적 변경) 링크에서 : http://www.c-sharpcorner.com/UploadFile/ff2f08/use-of-mvc-custom-action-filter/