我如何阻止MVC中的动作执行?

scu*_*Fun 3 asp.net-mvc

情况:

我有一个控制器(及其相关视图),在开发之后,决定它将被排除在当前阶段之外,相反,它将被包含在未来的某个阶段.

我不能简单地从解决方案中排除或删除控制器和视图,因为我提到的将来会使用控制器.我想到的一件事就是强制控制器上的每个动作在被访问时重定向到主页面,但我认为这不是太"优雅".

题:

当通过URL访问控件时,我可以使用哪种方法来阻止控件中的操作执行?

Rya*_*ann 5

像这样在代码库中保留未使用的代码通常是一个坏主意.假设你有某种版本控制,请保留该控制器的分支,但是从主分支中删除它.当您将功能恢复时,将该分支合并回来.

但是,如果真的无法删除代码,我会创建一个自定义过滤器,将对该控制器的任何请求重定向到其他URL.

[RedirectTo("Index", "Home")]
public class MyFutureController : Controller {
...
Run Code Online (Sandbox Code Playgroud)

你在哪里

public class RedirectToFilter : ActionFilterAttribute {
   public string RedirectAction { get; set;}
   public string RedirectController { get; set; }

   public RedirectToFilter(string redirectAction, string redirectController) {
      RedirectAction = redirectAction;
      RedirectController = redirectController;
   }

   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      filterContext.Result = RedirectToAction(RedirectAction, RedirectController);    
   }
}
Run Code Online (Sandbox Code Playgroud)

任何请求FutureController都会被重定向到您的Home/Index路线.将来,您只需要从控制器中删除该属性,就可以了.