Yanıtlar:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect)
{
...
filterContext.Result = new RedirectResult(url);
return;
}
...
}
new
) RedirectToAction:filterContext.Result = RedirectToAction(string action, string controller);
Ayrı bir sınıf oluşturun,
public class RedirectingAction : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
if (CheckUrCondition)
{
context.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Index"
}));
}
}
}
Ardından, bir denetleyici oluşturduğunuzda, bu ek açıklamayı şu şekilde adlandırın:
[RedirectingAction]
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}
RouteValueDictionary
MVC içinde başka bir yere yönlendirmeyi yansıtırken yapıcı için tercih ederim . +1
Yeniden yönlendirilen denetleyici baseController
, OnActionExecuting
yöntemi geçersiz kıldığımız yerden devralırsa, özyinelemeli döngüye neden olur. Hesap denetleyicisinin giriş işlemine yönlendirdiğimizi varsayalım, giriş işlemi OnActionExecuting
yöntemi çağırır ve aynı giriş işlemine tekrar tekrar yönlendirilir ... Bu nedenle OnActionExecuting
, isteğin aynı denetleyiciden hava durumunu kontrol etmek için bir check-in yöntemi uygulamalıyız. bu yüzden giriş işlemini tekrar yönlendirmeyin. İşte kod:
korumalı geçersiz kılma.
void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
some condition ...
}
catch
{
if (filterContext.Controller.GetType() != typeof(AccountController))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "Login" } });
}
}
}
new RedirectResult(url)
de kullanabilirsiniznew RedirectToAction(string action, string controller)
. Bu, yanıtınızı gönderdikten sonra MVC'ye eklenmiş olabilir. Çözümün beni yine de doğru yola soktu.