簡體   English   中英

通過ASP.NET MVC中的自定義操作篩選器重定向到自定義視圖

[英]Redirect to customized view via custom Action Filter in ASP.NET MVC

我需要實現以下自定義操作過濾器:

當應用於動作CountRows ,動作過濾器應該在它的OnActionExecuting CountRows “記住”之前被調用的動作,並將客戶端瀏覽器重定向到Login動作。 但是登錄操作應該以某種方式知道被調用的原始操作,這樣在登錄完成后,它將立即重定向回CountRows

我guessting我可以保存在原訴訟名名filterContextTempData ,但如何實現通常的場景?

您只需使用以下代碼即可完成此操作:

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM