2013-08-23 4 views

답변

2

당신은 할 수 있습니다 :

1) 어떤 행동에 리디렉션 후 일부 값 반환 :

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     /*If something happens*/ 
     if (/*Condition*/) 
     { 
      /*You can use Redirect or RedirectToRoute*/ 
      filterContext.HttpContext.Response.Redirect("Redirecto to somewhere"); 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 

(2)) 요청에 direcly 값을 쓰고 클라이언트에 전송을 끝냅니다.

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     /*If something happens*/ 
     if (/*Condition*/) 
     { 
      filterContext.HttpContext.Response.Write("some value here"); 
      filterContext.HttpContext.Response.End(); 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 
6

예, 가능합니다. ActionFilterAttributeOnActionExecuting을 재정의 할 때 제공되는 필터 컨텍스트의 결과를 설정할 수 있습니다. 소스에서

using System.Web.Mvc; 

public sealed class SampleFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.Result = new RedirectResult("http://google.com"); 
    } 
} 

, 당신은 필터 컨텍스트의 Result 속성을 설정하는 흐름을 변경하는 것을 볼 수 있습니다. System.Web.Mvc.ControllerActionInvoker에서

이 같은

internal static ActionExecutedContext InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func<ActionExecutedContext> continuation) 
{ 
    filter.OnActionExecuting(preContext); 
    if (preContext.Result != null) 
    { 
     return new ActionExecutedContext(preContext, preContext.ActionDescriptor, true /* canceled */, null /* exception */) 
     { 
      Result = preContext.Result 
     }; 
    } 

    // other code ommitted 
}