[英]Redirect to customized view via custom Action Filter in ASP.NET MVC
我需要實現以下自定義操作過濾器:
當應用於動作CountRows
,動作過濾器應該在它的OnActionExecuting
CountRows
“記住”之前被調用的動作,並將客戶端瀏覽器重定向到Login
動作。 但是登錄操作應該以某種方式知道被調用的原始操作,這樣在登錄完成后,它將立即重定向回CountRows
。
我guessting我可以保存在原訴訟名名filterContext
的TempData
,但如何實現通常的場景?
您只需使用以下代碼即可完成此操作:
[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重定向到鏈接“ 〜/ Home / Error ”。
此示例從鏈接中復制(並稍微更改以用於答案): http : //www.c-sharpcorner.com/UploadFile/ff2f08/use-of-mvc-custom-action-filter/
您不應該需要臨時數據。 理想情況下,您的SignIn GET操作應采用字符串returnUrl參數。 然后你可以使用過濾器並將filterContext.HttpContext.Request.RawUrl傳遞給登錄。讓它將重定向URL寫入登錄表單中的隱藏字段。 然后當他們POST時,執行auth,並返回Redirect(model.ReturnUrl)。
如果使用[Authorize]屬性修飾受保護的操作,MVC實際上默認具有此行為。 從技術上講,它傳遞的是Request.Url.Path而不是RawUrl,但概念和結果是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.