2012-05-15 27 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/