我需要實現以下自定義操作篩選:通過自定義操作過濾器重定向到自定義視圖在ASP.NET MVC
行動過濾器,當應用到操作CountRows
,應該在它的OnActionExecuting
左撇子「記住」的行動它正在被調用,並將客戶端瀏覽器重定向到例如Login
動作。但登錄操作應該以某種方式知道所調用的原始操作,以便登錄完成後立即重定向到CountRows
。
我在想,我可以將原始動作名稱保存在filterContext
的TempData
中,但是如何實現一般情況?
我需要實現以下自定義操作篩選:通過自定義操作過濾器重定向到自定義視圖在ASP.NET MVC
行動過濾器,當應用到操作CountRows
,應該在它的OnActionExecuting
左撇子「記住」的行動它正在被調用,並將客戶端瀏覽器重定向到例如Login
動作。但登錄操作應該以某種方式知道所調用的原始操作,以便登錄完成後立即重定向到CountRows
。
我在想,我可以將原始動作名稱保存在filterContext
的TempData
中,但是如何實現一般情況?
你不應該需要臨時數據。理想情況下,您的SignIn GET操作應採用字符串returnUrl參數。然後,您可以使用過濾器並將filterContext.HttpContext.Request.RawUrl傳遞給登錄。讓它將重定向URL寫入登錄表單中的隱藏字段。然後,當他們開機自檢時,執行認證,並返回一個重定向(model.ReturnUrl)。
默認情況下,如果使用[Authorize]屬性修飾受保護的動作,MVC實際上具有此行爲。從技術上講,它傳遞Request.Url.Path而不是RawUrl,但概念和結果是相同的。
你可以做到這一點簡單的代碼如下:
[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/