簡體   English   中英

“不允許子操作執行重定向操作”

[英]“Child actions are not allowed to perform redirect actions”

我有這個錯誤:

執行處理程序“System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper”的子請求時出錯。

內部例外:

不允許子操作執行重定向操作。

知道為什么會這樣嗎?

順便說一句,錯誤發生在這一行:

@Html.Action("Menu", "Navigation")

導航控制器中的菜單操作如下所示:

public ActionResult Menu()
{
    return PartialView();
}

這發生在我身上,因為我在控制器上有 [RequireHttps],並且從不同的控制器調用了一個子操作。 RequireHttps 屬性導致重定向

這是不允許的,因為 MVC 已經開始將視圖渲染到瀏覽器(客戶端)。 所以 MVC 框架阻止了這一點,因為客戶端已經接收到數據 (html)。 只要渲染正在進行中,您就無法在子視圖中重定向。

您可以改為返回RedirectToAction

代替

@Html.Action("Menu", "Navigation")

采用

@Url.Action("Menu", "Navigation")

為我工作:)

我有和上面描述的道格一樣的情況

我的解決方案:1)創建自定義控制器工廠。 需要在我的自定義 https 屬性中獲取 ControllerContext。

public class CustomControllerFactory : DefaultControllerFactory
    {
        public override IController CreateController(RequestContext requestContext, string controllerName)
        {
            var controller = base.CreateController(requestContext, controllerName);
            HttpContext.Current.Items["controllerInstance"] = controller;
            return controller;
        }
    }
}

2)在 Global.asax 文件中的 Application_Start 函數中,接下來寫道:

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory());

3)定義自定義https屬性:

public class CustomRequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
    {
        public bool RequireSecure = false;

        public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
        {

            if (RequireSecure && !((Controller)HttpContext.Current.Items["controllerInstance"]).ControllerContext.IsChildAction)
            {
                base.OnAuthorization(filterContext);
            }
        }        
    } 

4)使用新屬性定義帳戶控制器: [CustomRequireHttps]

像這樣重定向

string returnUrl = Request.UrlReferrer.AbsoluteUri;
return Redirect(returnUrl);

代替

return redirect("Action","Controller")

如果在控制器中添加了 [NoDirectAccess] 注釋,請刪除。

並在局部視圖的控制器中

返回 PartialView() 而不是 return View()

在 Html.Action 調用的 Action 執行重定向的情況下會發生這種情況,例如

return RedirectToAction("Error", "Home");

而不是返回所需的partialView

所以解決方案是刪除重定向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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