【问题标题】:Front Controller in MVC c#MVC c#中的前端控制器
【发布时间】:2016-12-06 11:23:07
【问题描述】:

谁能告诉我MVC 4 c# Visual Studio中的前端控制器是什么?

我的意思是,我必须做一个大型应用程序,并且我想增加安全性来限制对控制器和操作的访问。我曾经在 CodeIgniter 的 Front Controller 的 Logistic 中这样做,向会话中添加一个令牌,所以如果有人想在他无法访问的浏览器上手动编写路由。

我一直在阅读有关 [Authorize(Roles="Admin")] 的内容,我不得不承认这是一个解决方案,但这意味着我必须编写所有控制器的每个方法,并且我想拥有它集中在带有 IF/ELSE 的前端控制器中。

PD:如果你不知道怎么做,请至少告诉我在哪里可以找到 MVC c# Visual Studio 中的前端控制器。

谢谢大家。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller front-controller


    【解决方案1】:

    MVC 中没有前端控制器。您需要创建一个基本控制器,并且您的每个控制器都将继承基本控制器。

    public class BaseController : Controller
        {
    
            protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var getControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
                var getActionName = filterContext.ActionDescriptor.ActionName;
                //Write your code here
            }
        }
    

    现在用 Base 控制器继承你的控制器。

    public class AccountController : BaseController
        {
    
            //Your action goes here.
        }
    

    【讨论】:

    • 我已经尝试过了,但它没有按我的意愿工作,我的意思是,我想要一个控制器,其中每个动作都通过 FRONT 控制器。在示例中: url -> localhost/FRONTCONTROLLER/controller/method/parameters 而不是 localhost/controller/method/parameters
    • 如果您查看方法的实际名称,它是一个覆盖,可以捕获任何正在执行的操作。这使您可以在流程中的这一点上挂钩,允许您在执行之前添加任意数量的操作。不幸的是,并非所有模式都适用于每种设置。我很失望,没有像 Java/Spring 那样的现成方法来做到这一点,但如果你愿意灵活,你可以实现相同的功能。
    【解决方案2】:

    在 ASP MVC 中没有前端控制器之类的东西。我认为您正在寻找的东西是某种基本控制器,所有其他控制器都继承自该控制器。

    您可以将此 Authorize 属性添加到方法或类(整个控制器)。如果每个动作都需要这个属性,我建议创建一个主控制器,让每个控制器都继承自这个控制器。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 是的,我考虑过,我想我会使用它,因为我在 php 中做的前端控制器的想法似乎很困难。如果我找不到方法,我会使用过滤器:)
      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2015-11-30
      • 2012-06-26
      相关资源
      最近更新 更多